qt应用程序不退出

时间:2016-03-01 15:41:40

标签: c++ visual-studio qt

任何人都可以告诉我为什么这个简单的qt应用程序不会退出

int main(int argc, char* argv[])
{ 
QApplication app(argc,argv);
 QWidget* w = new QWidget(nullptr);
 w->show();
 w->close();
 app.exec();
 return 0;
}

我试图用这个循环显示所有顶级小部件

for (auto t : QApplication::topLevelWidgets())
    {
        t->show();
    }

并且关闭后窗口小部件不会被销毁,

甚至添加

w->setAttribute(Qt::WA_QuitOnClose);

无济于事。

我正在使用visual studio 2013和qt版本5.4

1 个答案:

答案 0 :(得分:3)

答案很简单:

关闭最后一个窗口后,

QApplication将退出 - 但是,这仅适用于应用程序运行时窗口关闭的情况!

在您的示例中,当您使用a.exec()运行应用程序时,没有打开的窗口。因此,在应用程序运行时不会关闭任何窗口并且它不会退出。在您启动应用程序之后,只要您致电w->close(); ,它就会有效。

如果您仍需要在开始之前关闭窗口小部件(无论出于何种原因),您可以执行以下操作:

w->show();
QMetaObject::invokeMethod(w, "close", Qt::QueuedConnection);
app.exec();

这样,只要应用程序进入事件循环,就会调用close