1 / 24

Biblioteka QT

Biblioteka QT. Autor: Jarosław Hryciuk j.hryciuk@students.mimuw.edu.pl. Plan prezentacji:. Twórcy Zastosowania Licencja Rozszerzenia C++: Qt Object Model Co może biblioteka Qt. Twórcy biblioteki: Trolltech. Firma norweska Główny produkt: Qt Qtopia. Zastosowania.

Download Presentation

Biblioteka QT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Biblioteka QT Autor: Jarosław Hryciuk j.hryciuk@students.mimuw.edu.pl

  2. Plan prezentacji: • Twórcy • Zastosowania • Licencja • Rozszerzenia C++: Qt Object Model • Co może biblioteka Qt

  3. Twórcy biblioteki: Trolltech • Firma norweska • Główny produkt: Qt • Qtopia

  4. Zastosowania • Mnóstwo udanych, komercyjnych produktów opartych na Qt • Środowisko KDE pod X Windows System • Mnóstwo różnorakiego oprogramowania użytkowego na licencji GPL pod X11.

  5. Licencja • Wersja GPL tylko na platformy Unix/X11, Macintosh, Linux/embedded. • Wersja komercyjna także na platformę Windows 32 bit.

  6. Przenaszalność • Wersje dla różnych systemów operacyjnych • Niezależny od kompilatora; rozszerzenia języka są oparte na Meta Object System, a nie na rozszerzeniach konkretnego kompilatora

  7. Qt Object System • Sygnały i sloty • Własności obiektów • QString – internacjonalizacja napisów. • Zdarzenia i filtry zdarzeń • Drzewa obiektów, porzucanie obiektów • Strzeżone wskaźniki

  8. Sygnały i sloty • Funkcja: komunikacja między obiektami QOBJECT • Wygodne przy tworzeniu interfejsów graficznych • Sygnał podłączany do slotu • Relacja wiele-do-wielu.

  9. Sygnały i sloty Makrodefinicja potrzebna do MOC class Foo : publicQObject { Q_OBJECT public: Foo(); int value() const { return val; } public slots: void setValue( int ); signals: void valueChanged( int ); private: int val; }; void Foo::setValue( int v ) { if ( v != val ) { val = v; emit valueChanged(v); } } Foo a, b; connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int))); b.setValue( 11 ); // a == undefined b == 11 a.setValue( 79 ); // a == 79 b == 79 b.value(); // returns 79

  10. Sygnały i sloty: dlaczego? • Zróżnicowana obsługa zaawansowanych opcji szablonów w różnych kompilatorach.Problem z częściowym instancjonowaniem szablonów. • Przejrzystość kodu, łatwa intuicja pomagająca zrozumieć istotę działania. • Zamiast rozszerzanych kompilatorów, specyficznych IDE, mamy MOC (meta object compiler) produkujący standardowy kod C++ kompilowalny na każdym kompilatorze.

  11. Sygnały i sloty vs. „callback” Zalety: • Wygodniejsze w użyciu. • Bezpieczne pod względem typów (type safe) – tylko sygnał zgodny z typem slotu może zostać do niego podłączony. • Projektując slot/sygnał nie musimy wiedzieć jak zostanie podłączony. Pełna abstrakcja i modularyzacja. Wady: • Około 10x wolniejsze niż „tradycyjne” callback.

  12. QString • Klasa do reprezentacji napisów. • Wewnętrzny sposób kodowania: unicode. • Używamy tr() do tekstów widocznych dla użytkownika: LoginWidget::LoginWidget() { QLabel *label = new QLabel( tr("Password:"), this ); ... } Używanie tr() w całej aplikacji gwarantuje właściwe kodowanie napisów.

  13. QString • Parametryzowane napisy: QString s1 = "%1 of %2 files copied. Copying: %3"; QString s2 = "Kopierer nu %3. Av totalt %2 filer er %1 kopiert."; qDebug( s1.arg(5).arg(10).arg("somefile.txt").ascii() ); qDebug( s2.arg(5).arg(10).arg("somefile.txt").ascii() ); 5 of 10 files copied. Copying: somefile.txt Kopierer nu somefile.txt. Av totalt 10 filer er 5 kopiert.

  14. Zdarzenia i filtry zdarzeń • Zdarzenie to klasa, która dziedziczy po QEvent. • QResizeEvent, QPaintEvent, QKeyEvent, QTimerEvent, QMouseEvent etc. • Mechanizm filtrowania zdarzeń.

  15. Filtrowanie zdarzeń • Pozwala na przechwytywanie i filtrowanie zdarzeń adresowanych do innych obiektów. • Wygodne przy tworzeniu GUI, np. okienka dialogowe często potrzebują przechwycić zdarzenie naciśnięcia klawisza Enter w innym widget i specjalnie je obsłużyć.

  16. Filtrowanie zdarzeń class KeyPressEater : public QObject { protected: bool eventFilter( QObject *o, QEvent *e ); }; bool KeyPressEater::eventFilter( QObject *o, QEvent *e ) { if ( e->type() == QEvent::KeyPress ) { // special processing for key press QKeyEvent *k = (QKeyEvent *)e; qDebug( "Ate key press %d", k->key() ); return TRUE; // eat event } else { // standard event processing return FALSE; } } KeyPressEater *keyPressEater = new KeyPressEater( this ); QPushButton *pushButton = new QPushButton( this ); QListView *listView = new QListView( this ); pushButton->installEventFilter( keyPressEater ); listView->installEventFilter( keyPressEater );

  17. Drzewa obiektów • Jeśli tworzymy jakiś QObject deklarując, że rodzicem jest jakiś inny QObject nasz obiekt jest dodawany do listy children() rodzica. • Jeśli obiekt-rodzic zostaje zniszczony, obiekty z listy children() zostają także usunięte. • Dostęp do wszystkich obiektów-korzeni drzew zależności mamy przez funkcję QObject::objectTrees() • QObject::dumpObjectTree() i QObject::dumpObjectInfo() służą do debugowania, gdy aplikacja zachowuje się dziwnie.

  18. Strzeżone wskaźniki Klasa QGuardedPtr jest szablonem do strzeżonych wskaźników do QObject. Strzeżony wskaźnik, QGuardedPtr<X>, zachowuje się jak normalny wskaźnik C++ X*, z tym, że gdy obiekt do którego się odnosi zostanie zniszczony, jest automatycznie ustawiany na 0 (w przeciwieństwie do zwyczajnych wskaźników C++, które w takim przypadku stają się „dyndającymi wskaźnikami”). X musi być podklasą QObject. QGuardedPtr<QLabel> label = new QLabel( 0, "label" ); label->setText( "I like guarded pointers" ); delete (QLabel*) label; // niszczymy wskaźnik if ( label) label->show(); else qDebug("The label has been destroyed");

  19. Co może biblioteka Qt ? • Doskonały zestaw klas pozwalający na budowanie aplikacji opartych na graficznym interfejsie użytkownika • Podsystem sieciowy. Niezależny od platformy bardzo wygodny interfejs gniazd oparty na sygnałach/slotach. • Podsystem SQL, możliwość dołączania własnych sterowników. Funkcjonalność podobna do JDBC. Obsługiwane: MySQL, Oracle, ODBC, PostgreSQL, Sybase, IBM DB2 • Wsparcie dla XML, parser SAX 2 (Simple API for XML), DOM Level 2.

  20. Kylix • Kylix to środowisko RAD (Rapid Application Development) pod Linuxa. Odpowiednik Delphi i C++ Buildera z pod Windows. Autor: firma Borland. • Aplikacje tworzone w Kylix używają biblioteki Qt do realizacji interfejsu użytkownika.

  21. Qtopia • Oparta na bibliotece Qt. • Platforma dla urządzeń mobilnych z Linuxem, np. dla telefonów komórkowych. • Np. Motorola wybrała Qtopię jako środowisko dla jej A760 Linux Smartphone (aparat, cyfrowy, mp3, video, internet) • Wymagania: aby działał linux/embedded z jądrem 2.4, IPC, framebuffer.

  22. Wnioski • Bardzo obszerne, dobrze zaprojektowane środowisko do tworzenia aplikacji z graficznym interfejsem użytkownika. • Funkcjonalne i praktyczne. Szeroko używane na świecie w projektach komercyjnych i niekomercyjnych.

  23. Dodatkowe źródła • Qt Reference Documentation • Strona firmy Trolltech – http://www.trolltech.no

  24. Dziękuję • Prezentacja dostępna pod adresem:http://rainbow.mimuw.edu.pl/~jh189390/qtprez/index.html

More Related