1

在 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 还是会导致什么问题?

4

1 回答 1

4

execQDialog、QMenu、QCoreApplication的方法运行一个事件循环。事件循环是无限的。

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

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

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

while (1) // QApplication::exec
{
    // There are no events
}
于 2012-08-22T08:00:12.527 回答