Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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,380 views

Published on

Published in: Education, Technology, Business
  • Be the first to comment

  • Be the first to like this

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 />

×