Title: Biblioteka QT
1Biblioteka QT
- Autor Jaroslaw Hryciuk
- j.hryciuk_at_students.mimuw.edu.pl
2Plan prezentacji
- Twórcy
- Zastosowania
- Licencja
- Rozszerzenia C Qt Object Model
- Co moze biblioteka Qt
3Twórcy biblioteki Trolltech
- Firma norweska
- Glówny produkt Qt
- Qtopia
4Zastosowania
- Mnóstwo udanych, komercyjnych produktów opartych
na Qt - Srodowisko KDE pod X Windows System
- Mnóstwo róznorakiego oprogramowania uzytkowego na
licencji GPL pod X11.
5Licencja
- Wersja GPL tylko na platformy Unix/X11,
Macintosh, Linux/embedded. - Wersja komercyjna takze na platforme Windows 32
bit.
6Przenaszalnosc
- Wersje dla róznych systemów operacyjnych
- Niezalezny od kompilatora rozszerzenia jezyka sa
oparte na Meta Object System, a nie na
rozszerzeniach konkretnego kompilatora
7Qt Object System
- Sygnaly i sloty
- Wlasnosci obiektów
- QString internacjonalizacja napisów.
- Zdarzenia i filtry zdarzen
- Drzewa obiektów, porzucanie obiektów
- Strzezone wskazniki
8Sygnaly i sloty
- Funkcja komunikacja miedzy obiektami QOBJECT
- Wygodne przy tworzeniu interfejsów graficznych
- Sygnal podlaczany do slotu
- Relacja wiele-do-wielu.
9Sygnaly i sloty
Makrodefinicja potrzebna do MOC
- class Foo public QObject
- Q_OBJECT
- public
- Foo()
- int value() const return val
- public slots
- void setValue( int )
- signals
- void valueChanged( int )
- private
- int val
-
void FoosetValue( 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
10Sygnaly i sloty dlaczego?
- Zróznicowana obsluga zaawansowanych opcji
szablonów w róznych kompilatorach.Problem z
czesciowym instancjonowaniem szablonów. - Przejrzystosc kodu, latwa intuicja pomagajaca
zrozumiec istote dzialania. - Zamiast rozszerzanych kompilatorów, specyficznych
IDE, mamy MOC (meta object compiler)
produkujacy standardowy kod C kompilowalny na
kazdym kompilatorze.
11Sygnaly i sloty vs. callback
- Zalety
- Wygodniejsze w uzyciu.
- Bezpieczne pod wzgledem typów (type safe) tylko
sygnal zgodny z typem slotu moze zostac do niego
podlaczony. - Projektujac slot/sygnal nie musimy wiedziec jak
zostanie podlaczony. Pelna abstrakcja i
modularyzacja. - Wady
- Okolo 10x wolniejsze niz tradycyjne callback.
12QString
- Klasa do reprezentacji napisów.
- Wewnetrzny sposób kodowania unicode.
- Uzywamy tr() do tekstów widocznych dla
uzytkownika - LoginWidgetLoginWidget()
- QLabel label new QLabel( tr("Password"),
this ) - ...
-
- Uzywanie tr() w calej aplikacji gwarantuje
wlasciwe kodowanie napisów.
13QString
- 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("so
mefile.txt").ascii() ) - qDebug( s2.arg(5).arg(10).arg("somefile.txt").asc
ii() ) - 5 of 10 files copied. Copying somefile.txt
Kopierer nu somefile.txt. Av totalt 10 filer er 5
kopiert.
14Zdarzenia i filtry zdarzen
- Zdarzenie to klasa, która dziedziczy po QEvent.
- QResizeEvent, QPaintEvent, QKeyEvent,
QTimerEvent, QMouseEvent etc. - Mechanizm filtrowania zdarzen.
15Filtrowanie zdarzen
- Pozwala na przechwytywanie i filtrowanie zdarzen
adresowanych do innych obiektów. - Wygodne przy tworzeniu GUI, np. okienka dialogowe
czesto potrzebuja przechwycic zdarzenie
nacisniecia klawisza Enter w innym widget i
specjalnie je obsluzyc.
16Filtrowanie zdarzen
- class KeyPressEater public QObject
- protected
- bool eventFilter( QObject o, QEvent e )
-
- bool KeyPressEatereventFilter( QObject o,
QEvent e ) - if ( e-gttype() QEventKeyPress )
- // special processing for key press
- QKeyEvent k (QKeyEvent )e
- qDebug( "Ate key press d", k-gtkey() )
- 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-gtinstallEventFilter
( keyPressEater ) listView-gtinstallEventFilter(
keyPressEater )
17Drzewa obiektów
- Jesli tworzymy jakis QObject deklarujac, ze
rodzicem jest jakis inny QObject nasz obiekt jest
dodawany do listy children() rodzica. - Jesli obiekt-rodzic zostaje zniszczony, obiekty z
listy children() zostaja takze usuniete. - Dostep do wszystkich obiektów-korzeni drzew
zaleznosci mamy przez funkcje QObjectobjectTrees
() - QObjectdumpObjectTree() i QObjectdumpObjectInf
o() sluza do debugowania, gdy aplikacja zachowuje
sie dziwnie.
18Strzezone wskazniki
- Klasa QGuardedPtr jest szablonem do strzezonych
wskazników do QObject. - Strzezony wskaznik, QGuardedPtrltXgt, zachowuje sie
jak normalny wskaznik C X, z tym, ze gdy
obiekt do którego sie odnosi zostanie zniszczony,
jest automatycznie ustawiany na 0 (w
przeciwienstwie do zwyczajnych wskazników C,
które w takim przypadku staja sie dyndajacymi
wskaznikami). X musi byc podklasa QObject.
QGuardedPtrltQLabelgt label new QLabel( 0,
"label" ) label-gtsetText( "I like guarded
pointers" ) delete (QLabel) label //
niszczymy wskaznik if ( label) label-gtshow()
else qDebug("The label has been destroyed")
19Co moze biblioteka Qt ?
- Doskonaly zestaw klas pozwalajacy na budowanie
aplikacji opartych na graficznym interfejsie
uzytkownika - Podsystem sieciowy. Niezalezny od platformy
bardzo wygodny interfejs gniazd oparty na
sygnalach/slotach. - Podsystem SQL, mozliwosc dolaczania wlasnych
sterowników. Funkcjonalnosc podobna do JDBC.
Obslugiwane MySQL, Oracle, ODBC, PostgreSQL,
Sybase, IBM DB2 - Wsparcie dla XML, parser SAX 2 (Simple API for
XML), DOM Level 2.
20Kylix
- Kylix to srodowisko RAD (Rapid Application
Development) pod Linuxa. Odpowiednik Delphi i C
Buildera z pod Windows. Autor firma Borland. - Aplikacje tworzone w Kylix uzywaja biblioteki Qt
do realizacji interfejsu uzytkownika.
21Qtopia
- Oparta na bibliotece Qt.
- Platforma dla urzadzen mobilnych z Linuxem, np.
dla telefonów komórkowych. - Np. Motorola wybrala Qtopie jako srodowisko dla
jej A760 Linux Smartphone (aparat, cyfrowy, mp3,
video, internet) - Wymagania aby dzialal linux/embedded z jadrem
2.4, IPC, framebuffer.
22Wnioski
- Bardzo obszerne, dobrze zaprojektowane srodowisko
do tworzenia aplikacji z graficznym interfejsem
uzytkownika. - Funkcjonalne i praktyczne. Szeroko uzywane na
swiecie w projektach komercyjnych i
niekomercyjnych.
23Dodatkowe zródla
- Qt Reference Documentation
- Strona firmy Trolltech http//www.trolltech.no
24Dziekuje
- Prezentacja dostepna pod adresemhttp//rainbow.m
imuw.edu.pl/jh189390/qtprez/index.html