Ernest Bursa i Karol Szmaj<br />Biblioteka graficzna Qt<br />
Biblioteka qt<br />To nie tylko biblioteka graficzna<br />
Biblioteka graficzna Qt<br />Sygnały i sloty<br />Widgety, layouty oraz style<br />Meta obiekty<br />Zarządzanie pamięcią<...
Biblioteka graficzna qt:Sygnały i sloty<br />
Sygnały<br />Emitowany w wypadku konkretnego pojawienia się konkretnego zdarzenia (np. clicked())<br />Widgety Qt posiadaj...
Sloty<br />Funkcja zostaje wywołana w odpowiedzi do pojawienia się sygnału<br />Predefiniowane sloty widgetów Qt (np. quit...
Sygnały i sloty<br />
Przykład 1:Połączenie sygnałów i slotów<br />
Okno aplikacji<br />
Przykład: Połączenia<br />
Przykład: Kod interfejsu i dowiązywanie standardowych sygnałów<br />
aboutQt() oraz showMaximized() uruchamiane są jeden po drugim<br />
Przykład 2:Synchronizowanie dwóch widgetów<br />
Przykład 2<br />Synchronizowanie dwóch widgetów<br />Zmienianie jednej wartości automatycznie zmienia drugą <br />
Parametry sygnałów<br />Przesyłanie dodatkowych informacji<br />Należy zdefiniować typ argumentu(ów)<br />Sygnał musi być ...
Sygnały<br />Sygnały i sloty muszą być ze sobą kompatybilne<br />W przypadku braku zgodności nie dostaniemy błędu kompilac...
Przegląd działania<br />Program wykonuje polecenie setValue(50)<br />QSpinBox emituje sygnał valieChanged(int)przekazując ...
Przykład 3:Ręczna obsługa sygnałów i slotów<br />
Meta obiekty<br />Meta Objects<br />
System metaobiektów Qt<br />C++ został rozszerzony o mechanizm metaobiektowy<br />Pobranie meta-informacji o klasach dzied...
QObject<br />Standard meta informacji nie jest wspierany przez standardowe C++<br />Klasa QObject<br />Klasa bazowa dla ob...
Możliwości meta obiektów<br />Sygnały i sloty<br />metaObject() – zwraca powiązane meta-obiekty dla klasy<br />QMetaObject...
... Sygnały<br />Emitowany sygnał<br />Slot zazwyczaj zostaje wykonany bezzwłocznie (tak jak zwykłe wywołanie funkcji)<br ...
Zarządzanie pamięcią <br />
Zarządzanie pamięcią<br />Hierarchia rodzic-dziecko zaimplementowana w QObject <br />Inicjalizowanie ze wskaźnikiem do rod...
Przykład 4:Relacja rodzic dziecko<br />
Przykład: Relacja rodzic dziecko<br />Layout jest dzieckiem Qwidget<br />Przycisk został dodanydo wzorca ale to widget otr...
Przykład: Tworzenie obiektów<br />Obiekty dziedziczące z Qobject są alokowane na kopcu używając new<br />Jeżeli obiekt rod...
OBSŁUGA WIELOWĄTKOWOŚCI:i QT<br />
Wielowątkowość<br />
Wielowątkowość<br />QT udostępnia API podobne do Posixowego<br />Klasa bazowa Qthread implementuje obsługę wielowątkowości...
Wielowątkowość<br />Qt dostarcza narzędzia ułatwiające bezpieczną synchronizację wątków<br />Qmutex, QMutexLocker<br />Qse...
Komunikacja wątku z resztą aplikacjimain.cpp<br />Źródło: http://www.kdedevelopers.org/node/4138<br />
Wielowątkowość cd.<br />
Oraz ma niewiele wspólnego z Qt <br />
Kontenery w QT<br />
Tulip<br />Moduł Qt o nazwie Tulip zastępuje i rozszerza pojemniki STL.<br />Kontenery w Qt są szablonami.<br />Kontenery ...
Nowe iteratory „wskazują” pomiędzy elementami (lub przed początkiem lub za końcem pojemnika)<br />składowe nowego iterator...
toBack()
hasNext()
next()
peekNext()
hasPrevious()
previous()
peekPrevious()</li></ul>Przykład iteratora:<br />QList<QString> lista;<br />lista << „Rychu" << „Zbychu" << "" << „Krzychu...
<ul><li>Działajątaksamonawszystkichplatformach
Zawierająłatwy w użyciu iterator zainspirowanyjęzykiem Java
Na niektórychplatformachsprzętowychwspieranychprzezQtopia Core, konteneryQtsąjedynymikonteneramijakichmożnaużywać
Implicit sharing (copy on write)‏</li></ul>Zalety konenerów<br />
qstring qt4<br />
Upcoming SlideShare
Loading in...5
×

Qt

1,100

Published on

Published in: Education, Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,100
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Qt

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

    Clipping is a handy way to collect important slides you want to go back to later.

×