X Window System (I) Oprogramowanie i wykorzystanie stacji roboczych. Wykład 1. X Window System (III) X Window System (II)



Podobne dokumenty
System X Window (I) Oprogramowanie i wykorzystanie stacji roboczych. Wykład 3. System X Window (III) System X Window (II)

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 3

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

The Graphics View Framework. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. he Graphics View Framework - architektura

Podstawy programowania w Qt4

Programowanie w środowiskach RAD Qt i C++

Qt - podstawowe cechy

Zaawansowane programowanie w C++

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Qt sygnały i designer

Mechanizm sygnałów i slotów. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4. Sygnały i sloty - definicja klasy

Programowanie w środowiskach RAD QtCreator, Qt i C++

Qt hierarchia elementów graficznych

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:

Praca z aplikacją designer

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Signals + Threads: Qt vs. Boost

Programowanie, część III

JavaFX. Technologie Biznesu Elektronicznego. Wydział Informatyki i Zarządzania Politechnika Wrocławska

Qt - edycja, obsługa zdarzeń, rozmieszczenie kontrolek

Wprowadzenie do tworzenia zaawansowanych interfejsów graficznych: QGraphics View Framework vs. QML. Jakub Bogacz. Patryk Górniak

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Qt - dialogi. Bogdan Kreczmer. ZPCiR ICT PWR pokój 307 budynek C3

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Monitorowanie Sieci nonblocking content packet filtering

Ćwiczenie Nr 6 Przegląd pozostałych najważniejszych mechanizmów systemu operacyjnego Windows

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Programowanie w środowisku graficznym GUI

Wybrane działy Informatyki Stosowanej

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Szablony funkcji i szablony klas

Programowanie współbieżne i rozproszone

Pracownia internetowa w szkole ZASTOSOWANIA

Pracownia internetowa w każdej szkole (edycja jesień 2005)

Wprowadzenie do biblioteki klas C++

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

Program Windykator I Moduły do programu. Wymagania systemowe oraz środowiskowe dla programów

ABA-X3 PXES v Podręczna instrukcja administratora. XDMCP Licencja FDL (bez prawa wprowadzania zmian) Tryb X terminala

Podstawy programowania. Wprowadzenie

Wprowadzenie do sieciowych systemów operacyjnych. Moduł 1

Programowanie obiektowe

Programowanie obiektowe zastosowanie języka Java SE

Instrukcje instalacji pakietu IBM SPSS Data Access Pack dla systemu Windows

Podstawy konfiguracji środowiska graficznego. Umieszczamy kursor na pustym obszarze na pulpicie i naciskamy prawy guzik:

INSTRUKCJA INSTALACJI I PIERWSZEGO URUCHOMIENIA APLIKACJI Rodzajowa Ewidencja Wydatków plus Zamówienia i Umowy

Galileo v10 pierwszy program

Wywoływanie metod zdalnych

7. zainstalowane oprogramowanie zarządzane stacje robocze

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

IBM SPSS Modeler Social Network Analysis 16 podręcznik instalowania i konfigurowania

Wybrane działy Informatyki Stosowanej

26.X.2004 VNC. Dawid Materna

Sposoby zdalnego sterowania pulpitem

28 maja 2013 r. X Window System. Autorzy: Jerzy Jelinek Paweł Korpowski

Politechnika Poznańska, Instytut Informatyki, TWO/GE. Programowanie dla ios

Zespól Szkół Ponadgimnazjalnych Nr 17 im. Jana Nowaka - Jeziorańskiego Al. Politechniki 37 Windows Serwer 2003 Instalacja

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

Dodanie nowej formy do projektu polega na:

Tworzenie aplikacji rozproszonej w Sun RPC

PRZYJĘTE ZASADY GRY...3 ZAŁOŻENIA PROJEKTU...4 CZYM JEST I DLACZEGO QT?...5 DIAGRAM KLAS...7 DIAGRAM GRY SINGLE PLAYER...8 DIAGRAM MULTIPLAYERA...

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

Praca w sieci z serwerem

Messenger. Novell 1.0 WYSZUKIWANIE DOKUMENTACJI PRODUKTU NOVELL MESSENGER. SZYBKI START

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

UNIXOWY PROTOKÓŁ GRAFICZNY ( X PROTOKÓŁ )

Instrukcja użytkownika Platforma transakcyjna mforex Trader dla systemu MacOS

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Konspekt pracy inżynierskiej

Wywoływanie metod zdalnych

Struktury systemów operacyjnych

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Programowanie obiektowe

Praca w środowisku Visual Studio 2008, Visual C

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Windows Server 2012 Active Directory

Aplikacje RMI

Rok akademicki: 2014/2015 Kod: MIO s Punkty ECTS: 4. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Wirtualizacja. Metody, zastosowania, przykłady

Autorzy. Zespół SABUR Sp. Z o.o. Wydanie Data. Sierpień SABUR Sp. Z o. o. Wszelkie prawa zastrzeżone

Dokumentacja aplikacji Szachy online

Architektura systemu e-schola

OpenLaszlo. OpenLaszlo

SPECYFIKACJA TECHNICZNA OPROGRAMOWANIA

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Instytut Teleinformatyki

BSX PRINTER INSTRUKCJA UŻYTKOWNIKA. Autor: Karol Wierzchołowski 10 sierpnia 2017

Telnet. Telnet jest najstarszą i najbardziej elementarną usługą internetową.

IBM SPSS Statistics - Essentials for Python: Instrukcje instalacji dla Windows

Instrukcja laboratoryjna cz.3

Wykład 5 Okna MDI i SDI, dziedziczenie

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

Transkrypt:

X Window System (I) Oprogramowanie i wykorzystanie stacji roboczych Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska X Window System można określić jako okienkowy rozproszony interfejs graficzny Powstał w 1985 roku w Massachusetts Institute of Technology Public Domain Działa na większości systemów zgodnych z C i POSIX obecna wersja: X11R7.4 (wersja 11 wydanie 7.4) jest zbiorem protokołów sieciowych takich jak telnet, ftp, http, które pozwalaja na zbudowanie rozproszonego systemu okienkowego. Istnieja darmowe implementacje systemu X - XFree86, X.Org. Poczawszy od wersji XFree86 2.4 istnieje wsparcie dla akceleracji sprzętowej (DRI - Direct Rendering Infrastructure) p. 1/34 X Window System (II) X Window System (III) X Window opiera sie na modelu klient-serwer. W X z użytkownikiem współdziała serwer, podczas gdy w innych typach usług po stronie użytkownika znajduje się klient. Aplikacje będace klientami moga działać na komputerze lokalnym badź odległym. Programy uruchomione na odległych komputerach moga działać na różnych systemach operacyjnych, korzystajac z lokalnego interfejsu graficznego. Działa niezależnie od zastosowanego protokołu komunikacyjnego (TCP/IP, DECnet, gniazdka w domenie UNIX, wspólna pamięć). X11 zapewniaja tylko podstawowe mechanizmy służace do tworzenia aplikacji. Nie definiuja interfejsu użytkownika - istnieje pewien szczególny klient o nazwie Window Manager zarzadzaj acy całościa interfejsu. W systemie X zapewnione jest, że zachowanie sie (feel) aplikacji będzie takie samo niezależnie od systemu (Window Managera). Natomiast prezentacja (look) zależy od Window Managera. X sa wielookienkowe - na ekranie może być otwartych wiele okien i w każdym z nich będzie uruchomione odrębne zadanie. Okna sa ułożone w sposób hierarchiczny - każde okno ma swoje okno macierzyste. Istnieje jedno okno będace oknem macierzystym dla wszystkich pozostałych okien (root window). W danej chwili aktywne jest tylko jedno okno do którego można wprowadzać informacje za pomoca klawiatury lub myszy. p. 3/34

X - Komunikacja klient - serwer X - Zasoby Klient oczekuje zdarzeń określonych typów zachodzacych we wszystkich oknach, od których jawnie zarzadał odbierania zdarzeń. Po potwierdzeniu, że zaszło w danym oknie pewne zdarzenie serwer wysyła je do wszystkich klientów oczekujacych na zdarzenia zachodzace w tym oknie. Zarzadzaniem zasobami (oknami, kontekstami graficznymi, czcionkami, tablicami kolorów, itp..) zajmuje się serwer X. Zasoby sa identyfikowane przez 32-bitowe numery i współdzielone przez aplikacje klientów. Okna potomne dziedzicza zasoby od swojego okna macierzystego, chyba że określono inaczej. Definicje czcionek sa przechowywane w plikach umieszczonych na komputerze serwera i w miarę potrzeby ładowane przez klientów. Od wersji X11R5 została wprowadzona usługa X Font Service. X zostały zaprojektowane z myśla o rozszerzaniu ich o nowe żadania, zasoby i zdarzenia. Można go więc rozbudowywać. Dwóch klientów może przesyłać pomiędzy soba za pośrednictwem serwera tzw. pseudozadania (do 20kB). p. 5/34 X Window System - klienci X Window System - Serwer X X-klient jest to aplikacja, która została utworzona przy wykorzystaniu biblioteki Xlib. Uruchamiajac X-klienta (aplikację) można podać określić dodatkowe opcje dotyczace: adresu serwera: -display adres-ip:0.0 geometrii: -geometry szerxwys+xoff+yoff kolorów: -fg yellow -bg blue -bd red innych parametry: -title xxx -fn xxx... Przykładowi klienci X: xclock, xmag, xterm,... Serwer X jest niezależnym od jadra procesem UNIX a uruchamianym w tle. Aplikacje klientów korzystaja z biblioteki Xlib. Uruchamianie zdalnej aplikacji: na komputerze zarzadzaj acym panelem graficznym na którym ma być wyświetlana aplikacja należy: uruchomić serwer X, np. startx umożliwić zdalnej maszynie dostęp do panela graficznego, np. xhost +alfa.imi.pcz.czest.pl należy zalogować się na komputer odległy, a następnie: albo nadać zmiennej DISPLAY wartość identyfikujac a panel graficzny, np. export DISPLAY=lab83a:0.0 albo uruchomić aplikację z opcja -display, np. xlogo -display lab83a:0.0 p. 7/34

Biblioteka Qt (I) Biblioteka Qt (II) Qt jest kompleksowym środowiskiem programistycznym dla języka C++ (Java), zawierajacym bibliotekę klas i narzędzia do tworzenia aplikacji wieloplatformowych. Umożliwia tworzenie aplikacji wieloplatformowych zgodnie z zasada write once, compile anywhere. Wieloplatformowa: Microsoft Windows (Vista, Server 2003, XP, NT 4, Me/98), MacOS X, Linux, Solaris, HP-UX, Tru64 (Digital UNIX), Irix, FreeBSD, BSD/OS, SCO AIX. Biblioteka jest udostępniana na podwójnej licencji: dla zastosowań komercyjnych istnieje licencja płatna, natomiast dla projektów niekomercyjnych dostępna jest wersja darmowa. Narzędzia służace do generowania aplikacji graficznych (RAD - Rapid Application Development) np. Qt Designer, Kdevelopment, Eclipse - Eclipse X11 integration GPLed i inne). Istnieje wersja biblioteki Qt dla systemów wbudowanych i urzadzeń mobilnych (Embeded Linux i Microsoft Windows CE), Zawiera wsparcie dla biblioteki OpenGL. p. 9/34 Architektura Wykorzystanie Biblioteka Qt udostępnia dobrze zaprojektowany i intuicyjny zestaw klas służacych do tworzenia rozbudowanych aplikacji wykorzystujacych graficzny interfejs użytkownika (GUI). Zbudowano bardzo wiele udanych produktów komercyjnych wykorzystujacych bibliotekę Qt (wykorzystywane między innymi przez firmy Adobe, IBM, Motorola, NASA, Mathematica, Lucas Film Ltd., Google Earth, Volvo i wiele innych). Środowisko KDE pod system X Window opiera się o bibliotekę Qt. VLC media player: p. 11/34

Budowa Biblioteka Qt - przykład aplikacji Biblioteka Qt jest zbudowana na niskopoziomowych interfejsach API udostępnianych przez dana architekturę. Qt Application Source Code Qt API Qt/Windows Qt/X11 Qt/Macintosh Qt/Embedded GDI Xlib Carbon MS-Windows Unix/Linux Mac OS X Embedded Linux #include <QApplication> #include <QPushButton> int main(int argc, char **argv) QApplication a(argc, argv); Zastosowanie takiego podejścia powoduje, że biblioteka Qt jest przenośna, a jednocześnie wydajna. QPushButton hello("hello world!"); hello.resize(160, 30); hello.show(); return a.exec(); kompilacja: g++ -I/usr/include/qt4/QtGui -I/usr/include/qt4 t1.cpp -L/usr/lib64/qt4 -lqtgui p. 13/34 Właściwości Widgety Biblioteka Qt udostępnia bogaty zbiór widgetów (w systemie MS Windows takie obiekty nazywane sa kontrolkami (controls) lub okienkami (windows), które udostępniaja funkcjonalność GUI. Posiada standardowy model obsługi zdarzeń umożliwiajacy na reagowanie np. na ruch myszy, czy też przyciśnięcie przez użytkownika klawisza. Oprócz tego udostępnia mechanizm sygnałów i slotów (signals and slots), który umożliwia przesyłanie komunikatów pomiędzy obiektami. Jest niezależna od kompilatora. Wprawdzie wprowadza rozszerzenia do języka, ale opieraja się one na Meta Object System (MOC), a nie na rozszerzeniach konkretnego kompilatora. Widgety sa to elementy graficznego interfejsu użytkownika. Sa nimi Wszystkie widoczne elementy aplikacji (przyciski, paski menu, paski przewijania, linie edycyjne). Widget może zawierać pewna liczbę potomnych widgetów (child widgets). Widgety potomne sa wyświetlane wewnatrz obszaru widgetu rodzica (parent widget). Widget, który nie posiada rodzica jest tzw. głównym widgetem aplikacji (oknem). Posiada on zazwyczaj pasek zadań (belkę tytułowa), której wyglad i opcje zależa od systemu operacyjnego (w przypadku X Window od Window Manager a). p. 15/34

Hierarchia widgetów Drzewa obiektów Klasa bazowa dla widgetów jest klasa QWidget. Widgetami sa wszystkie obiekty klas dziedziczacych bezpośrednio lub pośrednio po klasie QWidget (jak również obiekty klasy QWidget). QObject QTimer QWidget QDialog QFrame QSpinBox QLabel QLineEdit Gdy tworzymy obiekt klasy QObject określajac, że rodzicem jest jakiś inny obiekt klasy QObject, to tworzony obiekt jest dodawany do listy children() rodzica. Jeśli obiekt-rodzic zostaje zniszczony, to również automatycznie zostaja zniszczone obiekty z listy children. Zasady te oczywiście dotycza również widgetów. Lista wszystkich drzew obiektów jest dostępna przez statyczna metodę objecttrees klasy QObject. Metody QObject::dumpObjectTree() może być wykorzystana do debugowania aplikacji w przypadku problemów. p. 17/34 Mechanizm sygnałów i slotów Sygnały i sloty - relacje Mechanizm sygnałów i slotów umożliwia komunikację pomiędzy obiektami. Sygnał jest komunikatem informujacym, o wystapieniu pewnego zdarzenia. Obiekty z biblioteki Qt emituja (emit) sygnał w momencie wystapienia zdarzenia, np. gdy użytkownik nacisnał przycisk (QPushButton) - przycisk emituje sygnał clicked. Slot jest specyficzna metoda obiektu z biblioteki Qt, które może obsługiwać zdarzenie, np. zamykajaca aplikacje Qt (quit z klasy QApplication). Zarówno sygnały, jak i sloty moga posiadać parametry, poprzez które można przekazywać dodatkowe informacje o zaistniałym zdarzeniu. Sygnały można dowolnie łaczyć ze slotami (o ile posiadaja takie same parametry). Dany sygnał może zostać połaczony z wieloma slotami, jak również ze slotem może został połaczonych wiele sygnałów. Do łaczenia sygnałów ze slotami służy metoda connect z klasy QObject. Mechanizm sygnałów i slotów może być wykorzystywany w obiektach klas dziedzicz acych po klasie QObject. Object3 signal1 slot1 Object1 signal1 signal2 connect( Object1, signal1, Object2, slot1 ) connect( Object1, signal1, Object2, slot2 ) connect( Object1, signal2, Object4, slot1 ) Object4 Object2 signal1 slot1 slot2 connect( Object3, signal1, Object4, slot3 ) slot1 slot2 slot3 p. 19/34

Sygnały i sloty - zalety i wady Podstawowe typy okien Zalety: Wady: wygodniejsze w użyciu od standardowego modelu obsługi zdarzeń, bezpieczne pod względem typu (type safe) - tylko sygnał którego parametry sa zgodne z parametrami slotu moga być ze soba połaczone. projektujac sloty/sygnały nie musimy wiedzieć jak zostana one wykorzystane w aplikacji (pełna abstrakcja i modularyzacja), istnieje możliwość dynamicznego łaczenia/rozł aczania sygnałów i slotów w trakcie działania aplikacji. wolniejsze od tradycyjnego wywołania funkcji. QWidget QDialog QFrame QGridView QScrollView QWizard p. 21/34 Podstawowe elementy GUI Rozbudowane elementy GUI (I) p. 23/34

Rozbudowane elementy GUI (II) Rozbudowane elementy GUI (III) p. 25/34 Przykład 2 (I) Przykład 2 (II) class MyWidget: public QWidget public: MyWidget(QWidget *parent = 0); ; int main(int argc, char** argv) QApplication app(argc, argv); MyWidget widget; widget.show(); MyWidget::MyWidget(QWidget *parent): QWidget(parent) setwindowtitle("mywidget"); return app.exec(); setminimumsize(220, 120); // setmaximumsize(220, 120); QPushButton *ok = new QPushButton("Ok", this); ok->setgeometry(85, 45, 50, 30); connect(ok, SIGNAL(clicked()), qapp, SLOT(quit())); p. 27/34

Zdarzenia w bibliotece Qt Metody obsługi zdarzeń klasy QWidget W bibliotece Qt zdarzenia opisywane sa przez obiekty klas dziedziczacych po klasie QEvent. Zdarzenia sa dostarczane do obiektów Qt (dziedziczacych pośrednio lub bezpośrednio po klasie QObject). Do obsługi zdarzeń wykorzystywana jest metoda event(qevent*). Większość zdarzeń jest zwiazanych z GUI, ale istnieja również zdarzenia nie zwiazane z wygladem aplikacji (np. zwiazane z gniazdkami). Zdarzenia moga być obsługiwane w metodzie event. Znacznie wygodniej jest w większości wypadków korzystać ze specjalizowanych metod do obsługi zdarzeń. Zdarzenia zwiazane z klawiatura: keypressevent(qkeyevent*), keyreleaseevent(qkeyevent*) focusinevent(qfocusevent*), focusoutevent(qfocusevent*) Zdarzenia zwiazane z myszka: mousepressevent(qmouseevent*), mousereleaseevent(qmouseevent*), mousedoubleclickevent(qmouseevent*), mousemoveevent(qmouseevent*), enterevent(qevent*), leaveevent(qevent*) Zdarzenia zwiazane z oknami: paintevent(qpaintevent*), moveevent(qmoveevent*), resizeevent(qresizeevent*), showevent(qshowevent*), hideevent(qhideevent*) p. 29/34 Przykładowe zdarzenia Obsługa zdarzeń - przykład Wybrane metody klasy QMouseEvent: const QPoint & pos () const int x () const int y () const const QPoint & globalpos () const int globalx () const int globaly () const ButtonState button () const LeftButton RightButton MidButton NoButton Wybrane metody klasy QKeyEvent: int key () const (Qt::Key, np. Qt::Key_End, Qt::Key_J) int ascii () const QString text () const class MyPushButton: public QPushButton public: MyPushButton(const QString & text, QWidget * parent = 0); protected: void keypressevent(qkeyevent * e); ; MyPushButton::MyPushButton(const QString & text, QWidget * parent): QPushButton(text, parent) void MyPushButton::keyPressEvent(QKeyEvent * e) settext(e->text()); p. 31/34

Filtrowanie zdarzeń Filtrowanie zdarzeń - przykład Mechanizm filtrowania zdarzeń pozwala na przechwytywanie i filtrowanie zdarzeń adresowanych do innych obiektów. Jest użyteczny przy tworzeniu GUI, np. okno dialogowe może filtrować zdarzenia zwiazane z przyciśnięciem klawisza w odniesieniu do niektórych jego widgetów (np. zdarzeń zwiazanych z przyciśnięciem klawisza Enter czy Tab). Do filtrowania zdarzeń służa metody klasy QObject: void installeventfilter(const QObject* filterobj) void removeeventfilter(const QObject* obj) virtual bool eventfilter(qobject* watched, QEvent* e) class KeyPressEater : public QObject... protected: bool eventfilter( QObject *o, QEvent *e ); ; bool KeyPressEater::eventFilter( QObject *o, QEvent *e ) if ( e->type() == QEvent::KeyPress ) QKeyEvent *k = (QKeyEvent *)e;... // obsługa naciśnięcia klawisza w klasie KeyPressEater return TRUE; // zdarzenie nie zostanie wysłane do obiektu QObject else return FALSE; // standardowa obsługa pozostałych zdarzeń... KeyPressEater *keypresseater = new KeyPressEater(this); QPushButton *pushbutton = new QPushButton(this); pushbutton->installeventfilter(keypresseater); p. 33/34