SlideShare a Scribd company logo
1 of 59
Ernest Bursa i Karol Szmaj Biblioteka graficzna Qt
Biblioteka qt To nie tylko biblioteka graficzna
Biblioteka graficzna Qt Sygnały i sloty Widgety, layouty oraz style Meta obiekty Zarządzanie pamięcią
Biblioteka graficzna qt:Sygnały i sloty
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
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ń
Sygnały i sloty
Przykład 1:Połączenie sygnałów i slotów
Okno aplikacji
Przykład: Połączenia
Przykład: Kod interfejsu i dowiązywanie standardowych sygnałów
aboutQt() oraz showMaximized() uruchamiane są jeden po drugim
Przykład 2:Synchronizowanie dwóch widgetów
Przykład 2 Synchronizowanie dwóch widgetów Zmienianie jednej wartości automatycznie zmienia drugą
Parametry sygnałów Przesyłanie dodatkowych informacji Należy zdefiniować typ argumentu(ów) Sygnał musi być kompatybilny ze slotem (identyczne typy parametrów)
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ę
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
Przykład 3:Ręczna obsługa sygnałów i slotów
Meta obiekty Meta Objects
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
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++
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
... 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)
Zarządzanie pamięcią
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
Przykład 4:Relacja rodzic dziecko
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
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
OBSŁUGA WIELOWĄTKOWOŚCI:i QT
Wielowątkowość
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
Wielowątkowość Qt dostarcza narzędzia ułatwiające bezpieczną synchronizację wątków Qmutex, QMutexLocker Qsemaphore QWaitCondition itd. Qthread dziedziczy od QObject
Komunikacja wątku z resztą aplikacjimain.cpp Źródło: http://www.kdedevelopers.org/node/4138
Wielowątkowość cd.
Oraz ma niewiele wspólnego z Qt 
Kontenery w QT
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.
Nowe iteratory „wskazują” pomiędzy elementami (lub przed początkiem lub za końcem pojemnika) składowe nowego iteratora: ,[object Object]
toBack()
hasNext()
next()
peekNext()
hasPrevious()
previous()
peekPrevious()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;
[object Object]
Zawierająłatwy w użyciu iterator zainspirowanyjęzykiem Java
Na niektórychplatformachsprzętowychwspieranychprzezQtopia Core, konteneryQtsąjedynymikonteneramijakichmożnaużywać
Implicit sharing (copy on write)‏Zalety konenerów
qstring qt4

More Related Content

Similar to Qt

Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...Tomasz Kopacz
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004Tomasz Cieplak
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
Halokwadrat PLNOG - Freeswitch a big boys Softswitch
Halokwadrat PLNOG - Freeswitch a big boys SoftswitchHalokwadrat PLNOG - Freeswitch a big boys Softswitch
Halokwadrat PLNOG - Freeswitch a big boys Softswitchmichalpodoski
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future ProcessingPROIDEA
 
Audio/Video compressions and transmissions
Audio/Video compressions and transmissionsAudio/Video compressions and transmissions
Audio/Video compressions and transmissionsKonrad Russa
 
Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Bartlomiej Zass
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegroallegro.tech
 
Wprowadzenie do QML
Wprowadzenie do QMLWprowadzenie do QML
Wprowadzenie do QMLKildyt
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?javOnet
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?Brainhub
 

Similar to Qt (14)

Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...Mts 2013   tomasz kopacz - windows 8, office 365, workflow manager, windows a...
Mts 2013 tomasz kopacz - windows 8, office 365, workflow manager, windows a...
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
SQLite 2010
SQLite 2010SQLite 2010
SQLite 2010
 
University day 2
University day 2University day 2
University day 2
 
Halokwadrat PLNOG - Freeswitch a big boys Softswitch
Halokwadrat PLNOG - Freeswitch a big boys SoftswitchHalokwadrat PLNOG - Freeswitch a big boys Softswitch
Halokwadrat PLNOG - Freeswitch a big boys Softswitch
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
 
Audio/Video compressions and transmissions
Audio/Video compressions and transmissionsAudio/Video compressions and transmissions
Audio/Video compressions and transmissions
 
Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?Co nowego w VS 2013 dla programistów ASP.NET?
Co nowego w VS 2013 dla programistów ASP.NET?
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
Wprowadzenie do QML
Wprowadzenie do QMLWprowadzenie do QML
Wprowadzenie do QML
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?
 

Qt