Qt-Beispielprogramm: no such slot



  • Hallo,

    ich bin gerade dabei, mir Qt anzueignen und habe dazu folgendes Beispielprogramm aus einem Buch kompiliert und gestartet:

    // beispiele/signalslot5/mywindow.h
    #ifndef MYWINDOW_H
    #define MYWINDOW_H
    #include <QWidget>
    #include <QVBoxLayout>
    #include <QPushButton>
    #include <QLabel>
    #include <QObject>
    
    class MyWindow : public QWidget {
       Q_OBJECT
       public:
          MyWindow(QWidget *parent = 0);
       private:
          QLabel *label;
          QPushButton *button0;
          QPushButton *button1;
          QVBoxLayout* layout;
       private slots:
          void setText();
    };
    #endif
    
    // beispiele/signalslot5/mywindow.cpp
    #include "mywindow.h"
    
    MyWindow::MyWindow(QWidget *parent): QWidget(parent) {
       label = new QLabel("alter Text");
       button0 = new QPushButton ("Label aktualisieren");
       button1 = new QPushButton ("Beenden");
       layout = new QVBoxLayout(this);
    
       layout->addWidget(button0);
       layout->addWidget(button1);
       layout->addWidget(label);
       setLayout(layout);
    
       connect( button0, SIGNAL( clicked() ),
                this, SLOT( setText() ) );
       connect( button1, SIGNAL( clicked() ),
                this, SLOT( quit() ) );
    }
    
    void MyWindow::setText() {
         label->setText("neuer Text");
    }
    
    // beispiele/signalslot5/main.cpp
    #include <QApplication>
    #include "mywindow.h"
    
    int main(int argc, char *argv[])  {
       QApplication app(argc, argv);
       MyWindow* window = new MyWindow;
       window->show();
       return app.exec();
    }
    

    Wenn ich das kompilierte Programm ausführe und auf den button1 klicke, erscheint folgende Meldung im Terminal:
    Object::connect: No such slot MyWindow::quit()

    Wieso findet er diesen Slot nicht? (der eigene Slot Funktioniert)

    Danke für eure Hilfe!



  • Quit müßte m.E. für das Application-Object aufgerufen werden, nicht für das Window.
    Ansonsten probier mal 'close()' statt 'quit()'.



  • ja, entweder fuer das quit-signal qApp anstatt this (als "empfaenger"), oder this und close() und in der main-funktion

    QObject::connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) );
    

    dazupacken.

    ... hoffe ich, ungetestet (!)

    mfg,
    julian



  • #include <QApplication> // damit qApp definiert ist
    
    // ...
    
    connect( button1, SIGNAL( clicked() ), qApp, SLOT( quit() ) );
    
    // ...
    

Anmelden zum Antworten