qt - eigene slots
-
bekomme bei folgendem script...
#include <qapplication.h> #include <qpushbutton.h> class MyWidget : public QWidget { Q_OBJECT public: MyWidget(); signals: void myUsefulSignal(); private: QPushButton *aButton; }; MyWidget::MyWidget() { aButton = new QPushButton( this ); connect( aButton, SIGNAL(clicked()), SIGNAL(myUsefulSignal()) ); } int main(int arc, char **argv) { QApplication app(arc, argv); MyWidget w; w.show(); return app.exec(); }
... immer diese fehlermedlung...
g++ -c -pipe -Wall -W -DQT_NO_DEBUG -I/usr/lib/qt3/include -I/usr/lib/qt3/mkspecs/default -o main.o main.cpp
g++ -o slots main.o -L/usr/lib/qt3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
main.o: In functionMyWidget::MyWidget(void)': main.o(.text+0x1d): undefined reference to
MyWidget::QPaintDevice virtual table'
main.o(.text+0x24): undefined reference toMyWidget virtual table' main.o: In function
main':
main.o(.text+0x153): undefined reference toMyWidget::~MyWidget(void)' main.o(.text+0x193): undefined reference to
MyWidget::~MyWidget(void)'
collect2: ld returned 1 exit status
make: *** [slots] Fehler 1... kann mir da jemand helfen ?
stev
-
bestimt nicht mit Standard C++, ich verschiebe den Thread mal in Unix Forum, die sollten die meiste ahnung zu Qt haben.
-
Hallo
Wie kompilierst du dein Programm? Es sieht so aus als würde der moc Kompiler nicht aufgerufen.
Gruss sam
-
Hi,
qt - eigene slots
Du hast aber gar keine slots definiert.
Hast du vor dem compilieren moc ausgefuehrt??
Dein connect-Aufruf ist auch nicht korrekt. Da fehlt ein Parameter:
//connect( aButton, SIGNAL(clicked()), SIGNAL(myUsefulSignal()) ); connect( aButton, SIGNAL(clicked()), this, SLOT(myUsefulSignal()) );
so sollte es gehen. Damit der SLOT ausgefuehrt wird, musst du in deiner
Klasse signals durch slots ersetzenmfg
v R[ Dieser Beitrag wurde am 27.11.2002 um 08:30 Uhr von virtuell Realisticer editiert. ]
-
huch kleiner versprecher ich meinte signals , ist aber egal bei eigenen slots ist das gleiche problem. ich denke das es an diesem moc liegt. wozu brauch ich das den? und wie ruf ich das auf?
[ Dieser Beitrag wurde am 27.11.2002 um 14:37 Uhr von stevg editiert. ]
-
hi,
um den moc-compiler aufzurufen, wechselst du mit der Konsole in das Verzeichnis
in dem deine Quellcodedatei liegt und gibst folgenden Befehl ein:
$QTDIR/bin/moc dein_quellcode.cpp -o deine_mocdatei.moc
und schon erzeugt er dir eine moc-Datei.
Die moc-Datei musst du noch in deinen Quellcode, bevor du das erste mal dein eigenes SIGNAL bzw. SLOT benutzt, includieren.
Dein Code müsste dann ungefähr so aussehen:#include <qapplication.h> #include <qpushbutton.h> class MyWidget : public QWidget { Q_OBJECT public: MyWidget(); slots: void myUsefulSlot(); private: QPushButton *aButton; }; #include "deine_mocdatei.moc" MyWidget::MyWidget() { aButton = new QPushButton( "Button", this ); QObject::connect( aButton, SIGNAL(clicked()), this, SLOT(myUsefulSlot()) ); } int main(int arc, char **argv) { QApplication app(arc, argv); MyWidget w; app.setMainWidget(w); w->show(); return app.exec(); }
Wenn du nun gespeichert hast, rufst du erst den moc-compiler auf und dann den gcc. Danach müsste es einwandfrei funktionieren.
Tschau Gartenzwerg
[ Dieser Beitrag wurde am 27.11.2002 um 15:43 Uhr von Gartenzwerg editiert. ]