• Like
Qt
Upcoming SlideShare
Loading in...5
×

Qt

  • 1,041 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,041
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
7
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Ernest Bursa i Karol Szmaj
    Biblioteka graficzna Qt
  • 2. Biblioteka qt
    To nie tylko biblioteka graficzna
  • 3.
  • 4.
  • 5.
  • 6. Biblioteka graficzna Qt
    Sygnały i sloty
    Widgety, layouty oraz style
    Meta obiekty
    Zarządzanie pamięcią
  • 7. Biblioteka graficzna qt:Sygnały i sloty
  • 8. Sygnały
    Emitowany w wypadku konkretnego pojawienia się konkretnego zdarzenia (np. clicked())
    Widgety Qt posiadają predefiniowane sygnały
    Można bez ograniczeń tworzyć własne sygnały
  • 9. Sloty
    Funkcja zostaje wywołana w odpowiedzi do pojawienia się sygnału
    Predefiniowane sloty widgetów Qt (np. quit())
    Możemy także tworzyć sloty bez ograniczeń
  • 10. Sygnały i sloty
  • 11. Przykład 1:Połączenie sygnałów i slotów
  • 12. Okno aplikacji
  • 13. Przykład: Połączenia
  • 14. Przykład: Kod interfejsu i dowiązywanie standardowych sygnałów
  • 15. aboutQt() oraz showMaximized() uruchamiane są jeden po drugim
  • 16. Przykład 2:Synchronizowanie dwóch widgetów
  • 17. Przykład 2
    Synchronizowanie dwóch widgetów
    Zmienianie jednej wartości automatycznie zmienia drugą
  • 18.
  • 19. Parametry sygnałów
    Przesyłanie dodatkowych informacji
    Należy zdefiniować typ argumentu(ów)
    Sygnał musi być kompatybilny ze slotem (identyczne typy parametrów)
  • 20. Sygnały
    Sygnały i sloty muszą być ze sobą kompatybilne
    W przypadku braku zgodności nie dostaniemy błędu kompilacji lub ostrzerzenia tylko błąd podczas wykonania aplikacji (Incompatible sender/receiver arguments)
    Connect() zwraca wartość typu boolean potwierdzającą sukces bądź naszą porażkę
  • 21. Przegląd działania
    Program wykonuje polecenie setValue(50)
    QSpinBox emituje sygnał valieChanged(int)przekazując parametr typu int 50
    Argument jestprzekazywany doslotu Qslider setValue(int)
    Qslider emituje sygnał valueChanged(int) zargumentem 50
    Argument jest przekazany do slotu Qspinbox setValue(int) ale wartość aktualnie jest ustawiona na 50.Qt nie emituje żadnego sygnału by uniknąć nieskończonej pętli
  • 22. Przykład 3:Ręczna obsługa sygnałów i slotów
  • 23.
  • 24.
  • 25.
  • 26. Meta obiekty
    Meta Objects
  • 27. System metaobiektów Qt
    C++ został rozszerzony o mechanizm metaobiektowy
    Pobranie meta-informacji o klasach dziedziczących z Qobject podczas działania aplikacji
    Wykorzystywane do: pobierania listy sygnałów i slotów, właściwości oraz tłumaczeń tekstów
  • 28. QObject
    Standard meta informacji nie jest wspierany przez standardowe C++
    Klasa QObject
    Klasa bazowa dla obiektów używających systemu metaobiektów
    Makro Q_OBJECT
    Aktywuje możliwości meta obiektów
    Narzędzia „moc”
    Przetwarzają dyrektywy Q_OBJECT
    Rozszerzają kod źródłowy o dodatkowe funkcje (dodatkowe pliki)
    Usuwają sygnały, sloty i słowa kluczowe (np. emit) tak by kompilator widział standardowy kod C++
    System metaobiektów Qt jest wspierany przez każdy kompilator C++
  • 29. Możliwości meta obiektów
    Sygnały i sloty
    metaObject() – zwraca powiązane meta-obiekty dla klasy
    QMetaObject::className() – zwraca nazwę klasy jako Qstring
    Tr() – tłumaczy obiekty wywodzące się z Qstring
    setProperty() i property() – dynamicznie zmienia i pobiera właściwości poprzez podanie nazwy
  • 30. ... Sygnały
    Emitowany sygnał
    Slot zazwyczaj zostaje wykonany bezzwłocznie (tak jak zwykłe wywołanie funkcji)
    Kod zawarty po klauzuli emit() zostanie wykonany po tym jak wszystkie sloty zwrócą wartość
    Kolejkowane połączenia: sloty mogą być wykonywane później
    1 sygnał -> n slotów
    Sloty wykonywane są jeden po drugim (wg. Kolejności utrzymanej w kodzie)
  • 31. Zarządzanie pamięcią
  • 32. Zarządzanie pamięcią
    Hierarchia rodzic-dziecko zaimplementowana w QObject
    Inicjalizowanie ze wskaźnikiem do rodzica Qobject
    Rodzic dodaje nowy obiekt do listy swoich dzieci
    Skasuj rodzica
    Automatycznie kasuje wszystkie dzieci (rekursywnie)
    Skasuj dziecko
    Dziecko jest automatycznie usuwane z listy dzieci rodzica
  • 33. Przykład 4:Relacja rodzic dziecko
  • 34. Przykład: Relacja rodzic dziecko
    Layout jest dzieckiem Qwidget
    Przycisk został dodanydo wzorca ale to widget otrzymuje własność
    Poniższy przykład także wyświetli przycisk, ale nie zarządzany przez managera wzorców
  • 35. Przykład: Tworzenie obiektów
    Obiekty dziedziczące z Qobject są alokowane na kopcu używając new
    Jeżeli obiekt rodzica jest przypisany przejmuje prawa nad nowo stworzonym obiektem
    Obiekty nie dziedziczące z Qobject są alokowane na stosie
  • 36. OBSŁUGA WIELOWĄTKOWOŚCI:i QT
  • 37. Wielowątkowość
  • 38. Wielowątkowość
    QT udostępnia API podobne do Posixowego
    Klasa bazowa Qthread implementuje obsługę wielowątkowości
    Ważne funkcje klasy bazowej
    Qthread::Run() – Punkt rozpoczynający działanie wątku, przeciążany w klasie dziedziczącej
    Qthread::Start() – Rozpoczyna wykonywanie wątku poprzez wywołanie metody run()
    Qthread::Stop() – Dla zabicia wątku
    Qthread::Wait() – Oczekiwanie na ukończenie działania wątku
  • 39. Wielowątkowość
    Qt dostarcza narzędzia ułatwiające bezpieczną synchronizację wątków
    Qmutex, QMutexLocker
    Qsemaphore
    QWaitCondition
    itd.
    Qthread dziedziczy od QObject
  • 40.
  • 41. Komunikacja wątku z resztą aplikacjimain.cpp
    Źródło: http://www.kdedevelopers.org/node/4138
  • 42. Wielowątkowość cd.
  • 43.
  • 44. Oraz ma niewiele wspólnego z Qt 
  • 45. Kontenery w QT
  • 46. Tulip
    Moduł Qt o nazwie Tulip zastępuje i rozszerza pojemniki STL.
    Kontenery w Qt są szablonami.
    Kontenery Qt oprócz tradycyjnych iteratorów, implementują
    iteratory w stylu języka Java.
  • 47. Nowe iteratory „wskazują” pomiędzy elementami (lub przed początkiem lub za końcem pojemnika)
    składowe nowego iteratora:
    Przykład iteratora:
    QList<QString> lista;
    lista << „Rychu" << „Zbychu" << "" << „Krzychu”;
    QListIterator<QString> iter(lista);
    while (iter.hasNext())
    qDebug() << iter.next();
    Przykład foreach:
    QList<QString> lista;
    lista << „MUX" << „NAND" << „DMUX" ;
    foreach(QString s, lista)
    qDebug() << s;
  • 55.
    • Działajątaksamonawszystkichplatformach
    • 56. Zawierająłatwy w użyciu iterator zainspirowanyjęzykiem Java
    • 57. Na niektórychplatformachsprzętowychwspieranychprzezQtopia Core, konteneryQtsąjedynymikonteneramijakichmożnaużywać
    • 58. Implicit sharing (copy on write)‏
    Zalety konenerów
  • 59. qstring qt4
  • 60. W Qt nie używa się std::string. Podstawową klasą napisów w QT jest Qstring.
    QString
  • 61. QString – uwagi praktyczne
  • 62. Aplikacje bazujące na QT
  • 63. KDE 4
    Oparte o QT
  • 64. Qt Designer
    Qt IDE
  • 65. Gadu-Gadu
    Komunikator internetowy
  • 66. I wiele innych
  • 67.
  • 68. http://qt.nokia.com/products/
    Oficjalna strona biblioteki Qt
  • 69. Dziękujemy za uwagę
    Koniec prezentacji