Qt – sygnały i designer - Zakład Podstaw Cybernetyki i Robotyki
Transkrypt
Qt – sygnały i designer - Zakład Podstaw Cybernetyki i Robotyki
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 Copyright2012 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 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 Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności 1 Znaczenie rozszerzeń C++ w Qt Makro Q OBJECT Makra signals i slots 2 Designer – podstawowe własności Tworzenie własnego okienka Własne okienko c Copyright2012 BK Wizualizacja danych sensorycznych Qt – sygnały i designer 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 = 0L); public slots : void GdyRysuj(); signals: void JestNarysowane(); }; #endif c Copyright2012 BK Wizualizacja danych sensorycznych 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 c Copyright2012 BK Wizualizacja danych sensorycznych 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 = 0L); ... c Copyright2012 BK Wizualizacja danych sensorycznych 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 = 0L); ... c Copyright2012 BK Wizualizacja danych sensorycznych 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 = 0L); public: void GdyRysuj(); protected: void JestNarysowane(); }; c Copyright2012 BK Wizualizacja danych sensorycznych 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 = 0L); public: void GdyRysuj(); protected: void JestNarysowane(); }; c Copyright2012 BK Wizualizacja danych sensorycznych 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 ∗wRodzic = 0L); public: Kanwa(QWidget ∗wRodzic = 0L); public slots : void GdyRysuj(); public: void GdyRysuj(); signals: void JestNarysowane(); protected: void JestNarysowane(); }; c Copyright2012 BK Wizualizacja danych sensorycznych }; 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 ∗wRodzic = 0L); public: Kanwa(QWidget ∗wRodzic = 0L); public slots : void GdyRysuj(); public: void GdyRysuj(); signals: void JestNarysowane(); protected: void JestNarysowane(); }; c Copyright2012 BK Wizualizacja danych sensorycznych }; 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 ∗wRodzic = 0L); public: Kanwa(QWidget ∗wRodzic = 0L); public slots : void GdyRysuj(); public: void GdyRysuj(); signals: void JestNarysowane(); protected: void JestNarysowane(); }; c Copyright2012 BK Wizualizacja danych sensorycznych }; 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 ∗wRodzic = 0L); public: Kanwa(QWidget ∗wRodzic = 0L); public slots : void GdyRysuj(); public: void GdyRysuj(); signals: void JestNarysowane(); protected: void JestNarysowane(); }; c Copyright2012 BK Wizualizacja danych sensorycznych }; Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Aplikacja designer c Copyright2012 BK Wizualizacja danych sensorycznych Tworzenie własnego okienka Własne okienko 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. c Copyright2012 BK Wizualizacja danych sensorycznych 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. c Copyright2012 BK Wizualizacja danych sensorycznych 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. c Copyright2012 BK Wizualizacja danych sensorycznych Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Łączenie sygnałów i slotów c Copyright2012 BK Wizualizacja danych sensorycznych Tworzenie własnego okienka Własne okienko 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> c Copyright2012 BK Wizualizacja danych sensorycznych Qt – sygnały i designer <property name="font"> 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 c Copyright2012 BK Wizualizacja danych sensorycznych Qt – sygnały i designer 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( ); } c Copyright2012 BK Wizualizacja danych sensorycznych Qt – sygnały i designer 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 } c Copyright2012 BK Wizualizacja danych sensorycznych Qt – sygnały i designer 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 } c Copyright2012 BK Wizualizacja danych sensorycznych Qt – sygnały i designer Znaczenie rozszerzeń C++ w Qt Designer – podstawowe własności Koniec prezentacji Dziękuję za uwagę c Copyright2012 BK Wizualizacja danych sensorycznych Qt – sygnały i designer