Biblioteka QT - PowerPoint PPT Presentation

About This Presentation
Title:

Biblioteka QT

Description:

Title: Biblioteka QT Author: Hryciuk Last modified by: Hryciuk Created Date: 11/8/2003 7:34:56 PM Document presentation format: Pokaz na ekranie Company – PowerPoint PPT presentation

Number of Views:65
Avg rating:3.0/5.0
Slides: 25
Provided by: Hry8
Category:
Tags: biblioteka | what

less

Transcript and Presenter's Notes

Title: Biblioteka QT


1
Biblioteka QT
  • Autor Jaroslaw Hryciuk
  • j.hryciuk_at_students.mimuw.edu.pl

2
Plan prezentacji
  • Twórcy
  • Zastosowania
  • Licencja
  • Rozszerzenia C Qt Object Model
  • Co moze biblioteka Qt

3
Twórcy biblioteki Trolltech
  • Firma norweska
  • Glówny produkt Qt
  • Qtopia

4
Zastosowania
  • 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.

5
Licencja
  • Wersja GPL tylko na platformy Unix/X11,
    Macintosh, Linux/embedded.
  • Wersja komercyjna takze na platforme Windows 32
    bit.

6
Przenaszalnosc
  • Wersje dla róznych systemów operacyjnych
  • Niezalezny od kompilatora rozszerzenia jezyka sa
    oparte na Meta Object System, a nie na
    rozszerzeniach konkretnego kompilatora

7
Qt Object System
  • Sygnaly i sloty
  • Wlasnosci obiektów
  • QString internacjonalizacja napisów.
  • Zdarzenia i filtry zdarzen
  • Drzewa obiektów, porzucanie obiektów
  • Strzezone wskazniki

8
Sygnaly i sloty
  • Funkcja komunikacja miedzy obiektami QOBJECT
  • Wygodne przy tworzeniu interfejsów graficznych
  • Sygnal podlaczany do slotu
  • Relacja wiele-do-wielu.

9
Sygnaly 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
10
Sygnaly 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.

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

12
QString
  • 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.

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

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

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

16
Filtrowanie 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 )
17
Drzewa 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.

18
Strzezone 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")
19
Co 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.

20
Kylix
  • 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.

21
Qtopia
  • 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.

22
Wnioski
  • Bardzo obszerne, dobrze zaprojektowane srodowisko
    do tworzenia aplikacji z graficznym interfejsem
    uzytkownika.
  • Funkcjonalne i praktyczne. Szeroko uzywane na
    swiecie w projektach komercyjnych i
    niekomercyjnych.

23
Dodatkowe zródla
  • Qt Reference Documentation
  • Strona firmy Trolltech http//www.trolltech.no

24
Dziekuje
  • Prezentacja dostepna pod adresemhttp//rainbow.m
    imuw.edu.pl/jh189390/qtprez/index.html
Write a Comment
User Comments (0)
About PowerShow.com