int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QDialog dialog;
dialog.show();
return app.exec();
}
它运作良好,但经过以下一点改动之后:
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QDialog dialog;
dialog.exec();
return app.exec();
}
当我点击对话框右上角的关闭按钮时,对话框窗口消失但程序仍在运行
dialog.exec()和app.exec()之间的区别是什么? 我可以简单地使用dialog.exec()然后返回0或它会导致什么问题?
答案 0 :(得分:4)
QDialog,QMenu,QCoreApplication的exec
方法运行事件循环。事件循环是无限的。
因此QApplication事件循环应该是第一个要启动的循环。在大多数情况下,你应该使用QDialog :: show()或QDialog :: open()而不是QDialog :: exec()。
换句话说,您有以下代码:
while (1) // QDialog::exec
{
// Close event
}
while (1) // QApplication::exec
{
// There are no events
}