[QT] SLOT in selbstgeschreibener Klasse nicht akzeptiert?
-
Hallo Leute!
Ich habe eine Klasse geschrieben (TDMainWidget), die von einem Widget erbt. Zu dieser Klasse habe ich einen SLOT hinzugefügt:public slots: void newDataSet();
Im Konstruktor verbinde ich das Signal clicked() eines Buttons mit dem SLOT newDataSet:
connect(this->buttonNew, SIGNAL(clicked()), this, SLOT(newDataSet()));
Eigentlich sollte das ganze funktionieren, aber QT meldet folgendes:
QObject::connect: No such slot MainWidget::newDataSet()Besonders komisch finde ich, dass QT die Klasse als MainWidget identifiziert, die ja aber eigentlich nur die Klasse ist, von der geerbt wird.
Was mache ich falsch?
-
Hat deine Klasse auch QOBJECT in der definition drin stehen?
-
Nein, hatte es nicht. Wenn ich es allerdings hinzufüge werde ich mit einer Flut von Fehlern bombadiert:
tdmainwidget.o(.text+0x1c): In function
TDMainWidget::TDMainWidget[not-in-charge](QObject*, char const*)': /usr/lib/qt3/include/qglist.h:153: undefined reference to
vtable for TDMainWidget'
tdmainwidget.o(.text+0x28):/usr/lib/qt3/include/qglist.h:153: undefined reference tovtable for TDMainWidget' tdmainwidget.o(.text+0x68): In function
TDMainWidget::TDMainWidget[in-charge](QObject*, char const*)':
/home/hackbert/projekte/kteledata/kteledata/tdmainwidget.cpp:7: undefined reference tovtable for TDMainWidget' tdmainwidget.o(.text+0x74):/home/hackbert/projekte/kteledata/kteledata/tdmainwidget.cpp:7: undefined reference to
vtable for TDMainWidget'
tdmainwidget.o(.text+0xa3): In functionTDMainWidget::~TDMainWidget [not-in-charge]()': /home/hackbert/projekte/kteledata/kteledata/tdmainwidget.cpp:12: undefined reference to
vtable for TDMainWidget'
tdmainwidget.o(.text+0xaf):/home/hackbert/projekte/kteledata/kteledata/tdmainwidget.cpp:12: more undefined references to `vtable for TDMainWidget' followWas bringt das Q_OBJECT eigentlich? Und was bedeuten die Fehlermeldungen?
-
Die Zeile
public slots:
ist eigentlich kein C++.
Bei Qt gibt es einen MOC Preprozessor. Er nimmt alle Wörter, die nicht in dem ANSI C++ Umfang enthalten sind (z. B. QOBJECT, slots, signals) aus dem Programm raus und fügt stattdessen Initialisierungscode ein. (Eine *.moc Datei)
Wenn du KDevelop benutzst musst du in der Projektansicht auf Dateien klicken und dann rechtsklicken auf dein src-Ordner "Makefile.am" aktualisieren und "Erstellen" im Menü auswählen, anschließend "Aufräumen" und "Alles neu erstellen", dann kriegst du keine Fehlermeldungen mehr.
-
Klasse! Vielen Dank! Hat wunderbar funktioniert...
FAQ???
-
wieso, steht doch in der doku drin.