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