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
答案很简单:
QApplication一旦关闭最后一个窗口就会退出 - 但是,这只适用于应用程序运行时关闭窗口的情况!
在您的示例中,当您使用 运行应用程序时a.exec(),没有打开的窗口。因此,应用程序运行时不会关闭任何窗口,也不会退出。启动应用程序w->close(); 后,只要您致电,它就会起作用。
如果您仍然需要在开始之前关闭小部件(无论出于何种原因),您可以执行以下操作:
w->show();
QMetaObject::invokeMethod(w, "close", Qt::QueuedConnection);
app.exec();
Run Code Online (Sandbox Code Playgroud)
这样,close一旦应用程序进入其事件循环,就会被调用。
| 归档时间: |
|
| 查看次数: |
5330 次 |
| 最近记录: |