我刚开始使用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说应用程序意外退出。
有什么明显的我做错了吗?
由于
答案 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");