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

    mfg
    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. ]


Anmelden zum Antworten