Qt Signals
-
Hallo,
in meinem C++ Buch ist eine ganz kurze Einführung zu Qt mit folgendem Beispiel:class Zeichenflaeche: public QWidget { Q_OBJECT ... signals: void radiusChanged(int neuerRadius); protected: void paintEvent(QPaintEvent *event) { ... } };
Dazu habe ich 2 Fragen. Zum einen wieso hat ein Signal einen Parameter? Ist das dafür d, dass das Signal nur kommt, wenn z.B. neuerRadius einen bestimmten wert hat z.B.
connect(Zeichenflaeche,SIGNAL(radiusChanged(4),...)
aber eigentlich übergibbt man soch bei connect keine Werte.
Die 2. Frage ist. Warum macht man paintEvent protected?
Das wars erstmal.
-
zur ersten Frage:
Du connectest ein Signal ja normalerweise an einen Slot. Die Parameter des Signals werden dabei an den Slot weitergereicht.z.B.:
Zeichenflaeche::Zeichenflaeche(QWidget* parent) : QWidget(parent) { connect(this, SIGNAL(radiusChanged(int)), this, SLOT(foo(int))); } void Zeichenflaeche::changeRadius() { int radius = 9; emit radiusChanged(radius); } void Zeichenflaeche::foo(int radius) { // radius == 9 }
für alles weitere: http://doc.trolltech.com/4.6/signalsandslots.html
zur zweiten Frage:
paintEvent
und alle anderen Events sollen von außen natürlich nicht aufrufbar sein, da es keinen Sinn macht, Event-Funktionen manuell aufzurufen. Die werden automatisch aufgerufen, wenn das Event auftritt. Im Falle von paintEvent kann man das Event durch Aufruf vonupdate()
manuell lostreten, welche public ist.
protected auch daher, um Unterklassen das Überschreiben zu ermöglichen, damit die auf die Events auf ihre Art reagieren können