1=Qt – sygnały i designer
Transkrypt
1=Qt – sygnały i designer
Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Qt – sygnały i designer Bogdan Kreczmer [email protected] Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Wizualizacja danych sensorycznych c Copyright2015 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową. Wizualizacja danych sensorycznych Qt – sygnały i designer Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Niniejsza prezentacja została wykonana przy użyciu systemu składu LATEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net Wizualizacja danych sensorycznych Qt – sygnały i designer Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności 1 Reakcja na zadarzenia Podstawowe mechanizmy 2 Znaczenie rozszerzeń C++ w Qt Makro Q OBJECT Makra signals i slots 3 Designer – podstawowe własności Tworzenie własnego okienka Własne okienko Wizualizacja danych sensorycznych Qt – sygnały i designer Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Podstawowe mechanizmy Sposoby reakcji na zdarzenia Metody wirtualne – reimplementacja metod poprzez dziedzieczenie. Możliwa tylko we własnych klasach pochodnych. Sygnały i sloty – łączenie akcji z reakcją. Można łączyć gotowe elementy bez jakichkolwiek modyfikacji. Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Sygnały i sloty Zawartość pliku kanwa.hh: #ifndef KANWA HH #define KANWA HH #include <QWidget > class Kanwa: public QWidget { Q OBJECT public : Kanwa(QWidget ∗wRodzic = NULL); public slots : void GdyRysuj(); signals: void JestNarysowane(); }; #endif Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Wywołanie preprocesora języka C Polecenie: cpp -I/usr/include/c++/4.4 -I/usr/include/qt4 \ -I/usr/include/qt4/Qt -I/usr/include/qt4/QtCore \ -I/usr/include/qt4/QtGui kanwa.hh Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Po rozwinięciu – czym jest Q OBJECT class Kanwa: public QWidget { public : template <typename T> inline void qt check for QOBJECT macro(const T & q argument) const { int i = qYouForgotTheQ OBJECT Macro(this , & q argument); i = i; } static const QMetaObject staticMetaObject; virtual const QMetaObject ∗metaObject() const ; virtual void ∗qt metacast(const char ∗); static inline QString tr(const char ∗s, const char ∗c = 0) { return staticMetaObject.tr(s, c); } static inline QString trUtf8(const char ∗s, const char ∗c = 0) { return staticMetaObject.trUtf8(s, c); } static inline QString tr(const char ∗s, const char ∗c, int n) { return staticMetaObject.tr(s, c, n); } static inline QString trUtf8(const char ∗s, const char ∗c, int n) { return staticMetaObject.trUtf8(s, c, n); } virtual int qt metacall(QMetaObject::Call, int , void ∗∗); private : }; public : Kanwa(QWidget ∗wRodzic = NULL); ... Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Po rozwinięciu – czym jest Q OBJECT class Kanwa: public QWidget { public : template <typename T> inline void qt check for QOBJECT macro(const T & q argument) const { int i = qYouForgotTheQ OBJECT Macro(this , & q argument); i = i; } static const QMetaObject staticMetaObject; virtual const QMetaObject ∗metaObject() const ; virtual void ∗qt metacast(const char ∗); static inline QString tr(const char ∗s, const char ∗c = 0) { return staticMetaObject.tr(s, c); } static inline QString trUtf8(const char ∗s, const char ∗c = 0) { return staticMetaObject.trUtf8(s, c); } static inline QString tr(const char ∗s, const char ∗c, int n) { return staticMetaObject.tr(s, c, n); } static inline QString trUtf8(const char ∗s, const char ∗c, int n) { return staticMetaObject.trUtf8(s, c, n); } virtual int qt metacall(QMetaObject::Call, int , void ∗∗); private : }; public : Kanwa(QWidget ∗wRodzic = NULL); ... Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Po rozwinięciu – czym są sygnały i sloty class Kanwa: public QWidget { public : template <typename T> inline void qt check for QOBJECT macro(const T & q argument) const { int i = qYouForgotTheQ OBJECT Macro(this , & q argument); i = i; } ... private : public: Kanwa(QWidget ∗wRodzic = NULL); public: void GdyRysuj(); protected: void JestNarysowane(); }; Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Po rozwinięciu – czym są sygnały i sloty class Kanwa: public QWidget { public : template <typename T> inline void qt check for QOBJECT macro(const T & q argument) const { int i = qYouForgotTheQ OBJECT Macro(this , & q argument); i = i; } ... private : public: Kanwa(QWidget ∗wRodzic = NULL); public: void GdyRysuj(); protected: void JestNarysowane(); }; Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Po rozwinięciu – czym są sygnały i sloty class Kanwa: public QWidget { Q OBJECT class Kanwa: public QWidget { public : ... private : public : Kanwa(QWidget NULL); ∗wRodzic = public: Kanwa(QWidget NULL); public slots : void GdyRysuj(); public: void GdyRysuj(); signals: void JestNarysowane(); protected: void JestNarysowane(); }; Wizualizacja danych sensorycznych }; ∗wRodzic = Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Po rozwinięciu – czym są sygnały i sloty class Kanwa: public QWidget { Q OBJECT class Kanwa: public QWidget { public : ... private : public : Kanwa(QWidget NULL); ∗wRodzic = public: Kanwa(QWidget NULL); public slots : void GdyRysuj(); public: void GdyRysuj(); signals: void JestNarysowane(); protected: void JestNarysowane(); }; Wizualizacja danych sensorycznych }; ∗wRodzic = Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Po rozwinięciu – czym są sygnały i sloty class Kanwa: public QWidget { Q OBJECT class Kanwa: public QWidget { public : ... private : public : Kanwa(QWidget NULL); ∗wRodzic = public: Kanwa(QWidget NULL); public slots : void GdyRysuj(); public: void GdyRysuj(); signals: void JestNarysowane(); protected: void JestNarysowane(); }; Wizualizacja danych sensorycznych }; ∗wRodzic = Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Makro Q OBJECT Makra signals i slots Po rozwinięciu – czym są sygnały i sloty class Kanwa: public QWidget { Q OBJECT class Kanwa: public QWidget { public : ... private : public : Kanwa(QWidget NULL); ∗wRodzic = public: Kanwa(QWidget NULL); public slots : void GdyRysuj(); public: void GdyRysuj(); signals: void JestNarysowane(); protected: void JestNarysowane(); }; Wizualizacja danych sensorycznych }; ∗wRodzic = Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Aplikacja designer Wizualizacja danych sensorycznych Tworzenie własnego okienka Własne okienko Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Tworzenie własnego okienka Własne okienko Aplikacja designer 1 Wybór rodzaju komponentu 2 Ustalenie własności tworzonego komponentu. Nazwa wpisywana w polu objectName staje się nazwą klasy tworzonego komponentu. Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Tworzenie własnego okienka Własne okienko Aplikacja designer Klawisz pobieramy z okna narzędziowego. Własności i nazwę pola wskaźnikowego modyfikujemy w edytorze własności. Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Tworzenie własnego okienka Własne okienko Łączenie sygnałów i slotów Przejście do trybu edycji sygnałów. Myszką łączymy wybrane kontrolki. W dialogu wyboru połączeń dokonujemy zestawiania odpowiedniego sygnału i slotu. Wizualizacja danych sensorycznych Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Łączenie sygnałów i slotów Wizualizacja danych sensorycznych Tworzenie własnego okienka Własne okienko Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Tworzenie własnego okienka Własne okienko Plik opisów kompontentów: wlasne okno.ui <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>MojeOkienko</class> <widget class="QWidget" name="MojeOkienko"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>326</width> <height>231</height> </rect> </property> <property name="windowTitle"> <string>Okieno</string> </property> <widget class="QPushButton" name="_PrzyciskKoniec"> <property name="geometry"> <rect> <x>90</x> <y>70</y> <width>141</width> <height>91</height> </rect> </property> Wizualizacja danych sensorycznych Qt – sygnały i designer Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Tworzenie własnego okienka Własne okienko Korzystanie z komponentów tworzonych przez designer’a Użycie bezpośrednie – umieszenie komponentu w okienku tworzonym przez jedną ze standardowych klas (np. QWidget, QDialog itp.) Dziedziczenie jednokrotne – deklaracja komponentu jako pole w klasie dziedziczącej jedną ze standardowych klas (np. QWidget, QDialog itp.) tworzących okienko Dziedzieczenie wielokrotne – zdefiniowanie klasy dziedziczącej komponent oraz jedną ze standardowych klas (np. QWidget, QDialog itp.) tworzących okienko Wizualizacja danych sensorycznych Qt – sygnały i designer Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Tworzenie własnego okienka Własne okienko Użycie bezpośrednie #include ”komponent.h” #include <QApplication> #include <QDialog> int main( int argc, char ∗argv[ ] ) { QApplication app( argc, argv ); QDialog ∗wOkno = new QDialog; Ui::Komponent Komp; Komp.setupUi( wOkno ); wOkno–>show( ); return app.exec( ); } Wizualizacja danych sensorycznych Qt – sygnały i designer Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Tworzenie własnego okienka Własne okienko Dziedziczenie jednokrotne class OkienkoZPrzyciskiem : public QDialog { Q OBJECT public : OkienkoZPrzyciskiem( QWidget ∗rodzic = 0 ); private : Ui::Komponent ui; }; OkienkoZPrzyciskiem::OkienkoZPrzyciskiem( QWidget ∗rodzic) : QDialog( rodzic ) { ui.setupUi( this ); // Dodatkowe ustawienia // Wywołanie metody nadającej nazwy // Połączenia sygnałów i slotów } Wizualizacja danych sensorycznych Qt – sygnały i designer Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Tworzenie własnego okienka Własne okienko Dziedziczenie wielokrotne class OkienkoZPrzyciskiem : public QDialog, private Ui::Komponent { Q OBJECT public : OkienkoZPrzyciskiem( QWidget ∗rodzic = 0 ); }; OkienkoZPrzyciskiem::OkienkoZPrzyciskiem( QWidget ∗rodzic) : QDialog( rodzic ) { setupUi( this ); // Dodatkowe ustawienia // Wywołanie metody nadającej nazwy // Połączenia sygnałów i slotów } Wizualizacja danych sensorycznych Qt – sygnały i designer Reakcja na zadarzenia Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Koniec prezentacji Dziękuję za uwagę Wizualizacja danych sensorycznych Qt – sygnały i designer