Seite 1 von 1

quit() wird nicht ausgeführt

Verfasst: 30. November 2008 19:52
von Hans_Wurst
Hallo,

ich habe nachfolgenden Code geschrieben, welcher einfach nur ein Fenster mit einem Quit-Button anzeigt. Eigentlich sollte es beim clicken des Buttons das Fenster geschlossen werden, was es jedoch nicht tut.

Code: Alles auswählen

#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QPushButton *button = new QPushButton("Quit");
    QObject::connect(button, SIGNAL(clicked), &app, SLOT(quit()));
    button->show();

    return app.exec();
}
Kann mir jemand sagen woran es liegt? Muss ich eventuell noch irgend welche Bibliotheken bekannt geben oder ist mein Code falsch?

(Falls die Info nützlich ist: ich verwende Eclipse)

Verfasst: 30. November 2008 20:05
von Christian81

Code: Alles auswählen

QObject::connect(button, SIGNAL(clicked), &app, SLOT(quit())); 
QObject::connect() bringt hier unter Garantie false zurück.

Verfasst: 30. November 2008 20:16
von Hans_Wurst
Sorry für meine Unwissenheit, das hier ist gerade erst mein zweites Programm in Qt.

Was meist du damit, dass es garantiert FALSE liefert? Meinst es wird immer geliefert? Oder nur wenn ich auf Quit clicke (wäre FALSE dann etwa der erwartete Wert)?

Verfasst: 30. November 2008 20:21
von Christian81
Schau dir einfach nochmal an wie Du dein Signal genannt hast (nämlich falsch). Der Slot hingegen ist korrekt.

Verfasst: 30. November 2008 20:25
von Hans_Wurst
Ahh... ich habe "()" bei clicked vergessen. Danke dir für die schnelle Hilfe.

Verfasst: 30. November 2008 20:51
von Hans_Wurst
Aber irgendwie frage ich mich im nachhinein, warum hat mir der Compiler dann keine Fehlermeldung gegeben, als ich clicked anstatt clicked() geschrieben habe?

Verfasst: 30. November 2008 21:04
von Christian81
Weil dem Compiler total egal ist was für ein String er an die connect-Funktion übergibt.

http://doc.trolltech.com/4.4/qobject.html#connect

Während der Laufzeit wird aber auf der Konsole eine Warnung ausgegeben (sofern man sie unter Windows aktiviert hat)