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

C++ 在QDialog::exec()之后调用QApplication::exec(),c++,qt,user-interface,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,

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

QDialog、QMenu、qcore应用程序的
exec
方法运行一个事件循环。事件循环是无限的

因此,QApplication事件循环应该是第一个启动的循环。在大多数情况下,应该使用QDialog::show()或QDialog::open()而不是QDialog::exec()

换句话说,您有以下代码:

while (1) // QDialog::exec
{
    // Close event  
}

while (1) // QApplication::exec
{
    // There are no events
}

QDialog、QMenu、qcore应用程序的
exec
方法运行事件循环。事件循环是无限的

因此,QApplication事件循环应该是第一个启动的循环。在大多数情况下,应该使用QDialog::show()或QDialog::open()而不是QDialog::exec()

换句话说,您有以下代码:

while (1) // QDialog::exec
{
    // Close event  
}

while (1) // QApplication::exec
{
    // There are no events
}