任何人都可以告诉我为什么这个简单的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
答案 0 :(得分:3)
答案很简单:
关闭最后一个窗口后, QApplication
将退出 - 但是,这仅适用于应用程序运行时窗口关闭的情况!
在您的示例中,当您使用a.exec()
运行应用程序时,没有打开的窗口。因此,在应用程序运行时不会关闭任何窗口并且它不会退出。在您启动应用程序之后,只要您致电w->close();
,它就会有效。
如果您仍需要在开始之前关闭窗口小部件(无论出于何种原因),您可以执行以下操作:
w->show();
QMetaObject::invokeMethod(w, "close", Qt::QueuedConnection);
app.exec();
这样,只要应用程序进入事件循环,就会调用close
。