如何解释QApplication的app.exec()的行为;

时间:2017-04-05 15:33:16

标签: qt

以下代码将导致MainWindow打开并立即再次关闭:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QDir::setCurrent(QCoreApplication::applicationDirPath()); //just to be complete...
    if (app.arguments().size() == 1)
    {
        MainWindow mainWin;
        mainWin.show();
    }
    return app.exec();
}

虽然以下版本与我完全相同,但却按预期显示MainWindow

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QDir::setCurrent(QCoreApplication::applicationDirPath()); //just to be complete...
    if (app.arguments().size() == 1)
    {
        MainWindow mainWin;
        mainWin.show();
        return app.exec();
    }
}

为什么?

1 个答案:

答案 0 :(得分:1)

在第一种情况下,块中有MainWindow,当该块结束时,在进入应用程序事件循环之前,会自动销毁在其中创建的所有内容。在第二种情况下,块将仅在应用程序的事件循环停止后结束。

if (app.arguments().size() == 1)
{
    MainWindow mainWin;
    mainWin.show();
} // mainWin is destroyed here
return app.exec();