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 toMyWidget::QPaintDevice virtual table'
 main.o(.text+0x24): undefined reference toMyWidget virtual table' main.o: In functionmain':
 main.o(.text+0x153): undefined reference toMyWidget::~MyWidget(void)' main.o(.text+0x193): undefined reference toMyWidget::~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. ]