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



Podobne dokumenty
Oprogramowanie i wykorzystanie stacji roboczych. Wykład 3

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

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

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Qt sygnały i designer

Zaawansowane programowanie w C++

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

Praca z aplikacją designer

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

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

Signals + Threads: Qt vs. Boost

Programowanie, część III

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

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

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

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

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

Pracownia internetowa w szkole ZASTOSOWANIA

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

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

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...

Firebird Alternatywa dla popularnych darmowych systemów bazodanowych MySQL i Postgres

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

Programowanie w środowisku graficznym GUI

Instrukcje instalacji pakietu IBM SPSS Data Access Pack dla systemu Windows

Programowanie obiektowe

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

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

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

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

Szablony funkcji i szablony klas

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

CENNIK OPROGRAMOWANIE MEDIATOR/TERMINAL/TERMINAL GUI

Monitorowanie Sieci nonblocking content packet filtering

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

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

Bazy danych 2. Wykład 1

Programowanie współbieżne i rozproszone

CENNIK OPROGRAMOWANIE MEDIATOR/TERMINAL/TERMINAL GUI

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

1 Wprowadzenie do J2EE

Pojęcie systemu baz danych

Wprowadzenie do biblioteki klas C++

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

Podstawy programowania. Wprowadzenie

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

Programowanie obiektowe

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

CENNIK OPROGRAMOWANIE MEDIATOR/TERMINAL

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

16) Wprowadzenie do raportowania Rave

Oracle Application Express -

Konfiguracja modułu alarmowania w oprogramowaniu InTouch 7.11

Środowiska i platformy programistyczne

Dotacje na innowacje. Inwestujemy w waszą przyszłość.

Sposoby zdalnego sterowania pulpitem

ActiveXperts SMS Messaging Server

Wybrane działy Informatyki Stosowanej

Środowisko NetBeans. Paweł Boguszewski

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

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

Relacyjne, a obiektowe bazy danych. Bazy rozproszone

SPECYFIKACJA TECHNICZNA OPROGRAMOWANIA

Tworzenie aplikacji rozproszonej w Sun RPC

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

Wprowadzenie do QT OpenGL

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

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

Programowanie obiektowe zastosowanie języka Java SE

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

Galileo v10 pierwszy program

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Wywoływanie metod zdalnych

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

UNIXOWY PROTOKÓŁ GRAFICZNY ( X PROTOKÓŁ )

Wykład I. Wprowadzenie do baz danych

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

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

Wprowadzenie do sieciowych systemów operacyjnych. Moduł 1

7. zainstalowane oprogramowanie zarządzane stacje robocze

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

Dokumentacja aplikacji Szachy online

Język programowania. Andrzej Bobyk

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

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

Dodanie nowej formy do projektu polega na:

SAP BASIS Architektura systemu klient Server

Architektura systemu e-schola

Programowanie obiektowe

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

Struktury systemów operacyjnych

Instytut Teleinformatyki

Transkrypt:

System X Window (I) Oprogramowanie i wykorzystanie stacji roboczych Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska X Window 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 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/43 System X Window (II) System X Window (III) X Window opiera sie na modelu klient-serwer. W X Window 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ęć). X 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/43

X Window - Komunikacja klient - serwer X Window - 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/43 System X Window - klienci X Window - 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/43

Biblioteka Qt Biblioteka Qt - przykład aplikacji Qt jest kompleksowym środowiskiem programistycznym dla języka C++ zawierajacym bibliotekę klas i narzędzia do tworzenia aplikacji wieloplatformowych. Wieloplatformowa: Microsoft Windows 95/98/2000, Microsoft Windows NT, MacOS X, Linux, Solaris, HP-UX, Tru64 (Digital UNIX), Irix, FreeBSD, BSD/OS, SCO AIX. Do zastosowań niekomercyjnych jest dostępna wersja darmowa. Narzędzia służace do generowania aplikacji graficznych (RAD - Rapid Application Development) np. Qt Designer, Kdevelopment. Istnieje wersja biblioteki Qt dla Palmtop. Zawiera wsparcie dla biblioteki OpenGL. #include <QApplication> #include <QPushButton> int main(int argc, char **argv) QApplication a(argc, argv); 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. 9/43 Możliwości biblioteki Qt Wykorzystanie Biblioteka Qt udostępnia dobrze zaprojektowany i intuicyjny zestaw klas służacych do tworzenia rozbudowanych aplikacji wykorzystujacych graficzny interfejs użytkownika (GUI). Umożliwia tworzenie aplikacji wieloplatformowych zgodnie z zasada write once, compile anywhere. Posiada rozbudowany interfejs do baz danych w oparciu o SQL (podobna funkcjonalność co JDBC). Obsługuje MySQL, Oracle, ODBC, PostgreSQL, IBM DB2, Microsoft SQL Server, Sybase Adaptive Server, IBM DB2, PostgreSQL, Borland Interbase, SQLite. Posiada wsparcie dla XML. Wbudowany podsystem sieciowy niezależny od platformy. Umożliwia tworzenie aplikacji wielojęzycznych (internationalization). Zbudowano bardzo wiele udanych produktów komercyjnych wykorzystujacych bibliotekę Qt (wykorzystywane między innymi przez firmy Adobe, IBM, Motorola, NASA, Volvo i wiele innych). Środowisko KDE pod systemy X Window. Firma Borland (Inprise) opiera swoje produkty wykorzystujace język C++ na bibliotece Qt: C++ Builder - kontrolki CLX Kylix - środowisko RAD pod Linux a wykorzystujace Qt. p. 11/43

Architektura Właściwości 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 Zastosowanie takiego podejścia powoduje, że biblioteka Qt jest przenośna, a jednocześnie wydajna. 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. p. 13/43 Widgety Hierarchia widgetów 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). 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 p. 15/43

Drzewa obiektów Mechanizm sygnałów i slotów 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. 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). p. 17/43 Sygnały i sloty - relacje Sygnały i sloty - zalety i wady 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 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. około 10 razy wolniejsze od tradycyjnego wywołania funkcji. connect( Object3, signal1, Object4, slot3 ) slot1 slot2 slot3 p. 19/43

Podstawowe typy okien Podstawowe elementy GUI QWidget QDialog QFrame QGridView QScrollView QWizard p. 21/43 Rozbudowane elementy GUI (I) Rozbudowane elementy GUI (II) p. 23/43

Rozbudowane elementy GUI (III) Przykład 2 (I) class MyWidget: public QWidget public: MyWidget(QWidget *parent = 0); ; MyWidget::MyWidget(QWidget *parent): QWidget(parent) setwindowtitle("mywidget"); 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. 25/43 Przykład 2 (II) Zdarzenia w bibliotece Qt int main(int argc, char** argv) QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); 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ń. p. 27/43

Metody obsługi zdarzeń klasy QWidget Przykładowe zdarzenia 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*) 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 p. 29/43 Obsługa zdarzeń - przykład Filtrowanie zdarzeń 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) 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) void MyPushButton::keyPressEvent(QKeyEvent * e) settext(e->text()); p. 31/43

Filtrowanie zdarzeń - przykład 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/43