Qt 应用程序不退出

zap*_*lom 3 c++ qt visual-studio

谁能告诉我为什么这个简单的 qt 应用程序不退出

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

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

for (auto t : QApplication::topLevelWidgets())
    {
        t->show();
    }
Run Code Online (Sandbox Code Playgroud)

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

甚至添加

w->setAttribute(Qt::WA_QuitOnClose);
Run Code Online (Sandbox Code Playgroud)

没有帮助。

我正在使用 Visual Studio 2013 和 Qt 版本 5.4

Fel*_*lix 5

答案很简单:

QApplication一旦关闭最后一个窗口就会退出 - 但是,这只适用于应用程序运行时关闭窗口的情况!

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

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

w->show();
QMetaObject::invokeMethod(w, "close", Qt::QueuedConnection);
app.exec();
Run Code Online (Sandbox Code Playgroud)

这样,close一旦应用程序进入其事件循环,就会被调用。