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