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() ) ); // ...