Qt应用程序在Mac OSX上的退出事件中崩溃

时间:2011-04-08 15:03:17

标签: qt macos

我刚开始使用Mac上的Qt并完成工作:

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

当我运行第二个具有以下代码的示例时:

#include <QtGui>

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();
}

应用程序启动正常,工作正常。单击“退出”按钮时出现唯一的问题。当我这样做时,调用崩溃报告器并且osx说应用程序意外退出。

有什么明显的我做错了吗?

由于

2 个答案:

答案 0 :(得分:4)

如果在堆栈上声明变量,问题就是删除的顺序。最好给你的对象父母,以便他们可以摧毁孩子们。

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

    QWidget window;

    // If window get's destroyed, it will destroy it's children...
    QTextEdit textEdit(&window);
    QPushButton quitButton("Quit",&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:您是否真的尝试使用调试器来查看它崩溃的位置?它会给你一个想法;)我的建议是采用一个有效的Qt例子并使用它。

PS2:我创建小部件的顺序也可以防止崩溃......

答案 1 :(得分:0)

尝试:

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