2 Stimmen

Qt-Anwendung stürzt beim Beenden auf Mac OSX ab

Ich fange gerade mit Qt auf einem Mac an und arbeite durch:

http://doc.qt.nokia.com/4.7/gettingstartedqt.html

Wenn ich das zweite Beispiel ausführe, das den folgenden Code enthält:

#include 

int main(int argv, char **args)
{
    QApplication app(argv, args);

    QTextEdit textEdit;
    QPushButton quitButton("Quit");

    QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));

    QVBoxLayout layout;
    layout.addWidget(&textEdit);
    layout.addWidget(&quitButton);

    QWidget window;
    window.setLayout(&layout);

    window.show();

    return app.exec();
}

Die Anwendung startet problemlos und funktioniert einwandfrei. Das einzige Problem tritt auf, wenn ich auf die Schaltfläche "Quit" klicke. Wenn ich das tue, wird der Absturzberichterstatter aufgerufen und OSX sagt, dass die App unerwartet beendet wurde.

Mache ich etwas offensichtlich falsch?

Danke

4voto

Derick Schoonbee Punkte 2873

Das Problem liegt in der Reihenfolge des Löschens, wenn Sie Variablen auf dem Stack deklarieren. Am besten ist es, Ihren Objekten Eltern zuzuweisen, damit sie die Kinder zerstören können.

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QWidget window;

    // Wenn das Fenster zerstört wird, werden auch seine Kinder zerstört...
    QTextEdit textEdit(&window);
    QPushButton quitButton("Beenden", &window);

    QObject::connect(&quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));

    QVBoxLayout layout;
    layout.addWidget(&textEdit);
    layout.addWidget(&quitButton);

    window.setLayout(&layout);

    window.show();

    return app.exec();
}

PS: Haben Sie tatsächlich versucht, einen Debugger zu verwenden, um zu sehen, wo es abstürzt? Es wird Ihnen eine Idee geben ;) Mein Vorschlag ist, ein funktionierendes Qt-Beispiel zu nehmen und damit zu experimentieren.

PS2: Die Reihenfolge, in der ich die Widgets erstellt habe, verhindert auch den Absturz...

0voto

tibur Punkte 11175

Versuchen Sie es:

QTextEdit * textEdit = new QTextEdit;
QPushButton * quitButton = new QPushButton("Beenden");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X