Qt sygnały i designer Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2015 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ą. Qt sygnały i designer
Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net Qt sygnały i designer
1 Reakcja na zadarzenia Podstawowe mechanizmy 2 Makro Q OBJECT Makra signals i slots 3 Tworzenie własnego okienka Własne okienko Qt sygnały i designer
Sposoby reakcji na zdarzenia Podstawowe mechanizmy 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.
Sygnały i sloty Reakcja na zadarzenia Makro Q OBJECT Makra signals i slots Zawartość pliku kanwa.hh: #ifndef KANWA HH #define KANWA HH #include <QWidget > Q OBJECT Kanwa(QWidget wrodzic = NULL); public slots : void GdyRysuj(); signals: void JestNarysowane(); #endif
Wywołanie preprocesora języka C Polecenie: Makro Q OBJECT Makra signals i slots 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
Makro Q OBJECT Makra signals i slots Po rozwinięciu czym jest Q OBJECT 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 : Kanwa(QWidget wrodzic = NULL);...
Makro Q OBJECT Makra signals i slots Po rozwinięciu czym jest Q OBJECT 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 : Kanwa(QWidget wrodzic = NULL);...
Makro Q OBJECT Makra signals i slots Po rozwinięciu czym są sygnały i sloty 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();
Makro Q OBJECT Makra signals i slots Po rozwinięciu czym są sygnały i sloty 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();
Makro Q OBJECT Makra signals i slots Po rozwinięciu czym są sygnały i sloty Q OBJECT Kanwa(QWidget wrodzic = NULL); public slots : void GdyRysuj(); signals: void JestNarysowane(); private :... public: Kanwa(QWidget wrodzic = NULL); public: void GdyRysuj(); protected: void JestNarysowane();
Makro Q OBJECT Makra signals i slots Po rozwinięciu czym są sygnały i sloty Q OBJECT Kanwa(QWidget wrodzic = NULL); public slots : void GdyRysuj(); signals: void JestNarysowane(); private :... public: Kanwa(QWidget wrodzic = NULL); public: void GdyRysuj(); protected: void JestNarysowane();
Makro Q OBJECT Makra signals i slots Po rozwinięciu czym są sygnały i sloty Q OBJECT Kanwa(QWidget wrodzic = NULL); public slots : void GdyRysuj(); signals: void JestNarysowane(); private :... public: Kanwa(QWidget wrodzic = NULL); public: void GdyRysuj(); protected: void JestNarysowane();
Makro Q OBJECT Makra signals i slots Po rozwinięciu czym są sygnały i sloty Q OBJECT Kanwa(QWidget wrodzic = NULL); public slots : void GdyRysuj(); signals: void JestNarysowane(); private :... public: Kanwa(QWidget wrodzic = NULL); public: void GdyRysuj(); protected: void JestNarysowane();
Aplikacja designer Tworzenie własnego okienka Własne okienko
Aplikacja designer Tworzenie własnego okienka Własne okienko 1 Wybór rodzaju komponentu 2 Ustalenie własności tworzonego komponentu. Nazwa wpisywana w polu objectname staje się nazwą klasy tworzonego komponentu.
Aplikacja designer Tworzenie własnego okienka Własne okienko Klawisz pobieramy z okna narzędziowego. Własności i nazwę pola wskaźnikowego modyfikujemy w edytorze własności.
Łączenie sygnałów i slotów Tworzenie własnego okienka Własne okienko Przejście do trybu edycji sygnałów. Myszką łączymy wybrane kontrolki. W dialogu wyboru połączeń dokonujemy zestawiania odpowiedniego sygnału i slotu.
Łączenie sygnałów i slotów Tworzenie własnego okienka Własne okienko
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> Qt sygnały i designer
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 Qt sygnały i designer
Użycie bezpośrednie Tworzenie własnego okienka Własne okienko #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( ); Qt sygnały i designer
Dziedziczenie jednokrotne Tworzenie własnego okienka Własne okienko class OkienkoZPrzyciskiem : public QDialog { Q OBJECT 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 } Qt sygnały i designer
Dziedziczenie wielokrotne Tworzenie własnego okienka Własne okienko class OkienkoZPrzyciskiem : public QDialog, private Ui::Komponent { Q OBJECT 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 } Qt sygnały i designer
Koniec prezentacji Dziękuję za uwagę Qt sygnały i designer