2011-04-08 142 views
2

我只是在Mac上开始接触Qt和合作,通过: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说应用程序意外退出。

任何明显的我做错了?

感谢

回答

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:我创建的部件的顺序也可以防止碰撞...

+0

完美的,非常感谢解释。 – rainkinz 2011-04-08 15:39:30

0

尝试:

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