QT4 Problem mit Signal/Slot



  • Hallo,
    ich habe bei nachfolgendem Programm das Problem, dass es zwar problemlos Compiliert und startet, aber leider nicht auf die Schaltfläche reagiert. Wenn ich als Slot quit() verwende, schließt das Programm, also wird das Signal schon mal erzeugt, und wenn ich manuell die eingetragene slotfunktion per funktionsaufruf starte, kommt das fenster, geht also auch, nur in dieser Kombination will es nicht. kann mir da einer helfen. Ich brauche eine Lösung, wie eine Klasse ein signal erzeugen kann, und eine andere es mit ihrem slot empfängt.

    #include <QApplication>
        #include <QFont>
        #include <QPushButton>
        #include <QMessageBox>
    
        class MyObject : public QObject
        {
        public slots:
            void on_Button();
        };
    
        void MyObject::on_Button()
        {
             QMessageBox::information(0, "Signal", "Button was clicked!", 0, 0, 0);
        }
    
        class MyWidget : public QWidget
        {
        public:
            MyWidget(QWidget *parent = 0);
        };
    
        MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
        {
            QPushButton *button = new QPushButton("Click me!", this);
    
            MyObject *object = new MyObject;
    
            connect(button, SIGNAL(clicked()), object, SLOT(on_Button()));
        }
    
        int main(int argc, char *argv[])
        {
            QApplication app(argc, argv);
            MyWidget widget;
            widget.show();
            return app.exec();
        }
    


  • Ich denke es liegt daran, weil du in der Klassendefinition das Q_OBJECT vergessen hast.

    class MyObject : public QObject
    {
        Q_OBJECT 
        public slots:
        void on_Button();
    };
    


  • ja stimmt, danke. ich hatte es rausgenommen weil ich komische vtable fehler hatte, aber dann hab ich rausgefunden, dass die kommen wenn man keine getrennten headerdateien verwendet, weil der moc dann durcheinander kommt.


Anmelden zum Antworten