在QDialog :: exec()之后调用QApplication :: exec()

时间:2012-08-22 07:35:04

标签: c++ qt user-interface

在Qt书中,有一个例子:

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或它会导致什么问题?

1 个答案:

答案 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
}