如何完全删除 QApplication 实例,以便可以在剪切库中再次重新创建它。 如果我有这样的代码:
int main(int argc, char ** argv) {
QApplication *app = new QApplication(argc, argv);
MyWindow dialog;
dialog.show();
app->exec();
return 0
}
我希望能够在退出应用程序后删除实例(在 app.exec() 之后关闭应用程序) 我尝试执行以下操作:
app->setQuitOnLastWindowClosed(false);
app->quit();
delete app;
但是他们都不能工作。我想删除 QApplication 实例,就像我以前没有创建的那样。 如果我没有在主库中定义 QApplication,我的共享库中的 QApplication 总是有效的。
- 库(lib)和主应用程序(app)使用不同的Qt副本。
- 我正在开发应用程序,库已导入我的应用程序。
- 关闭第一个对话框后,我正在使用一个事件来触发库中正在等待此事件的线程。
你不需要这样做,因为QApplication
只能在主线程中创建。如果库和主可执行文件共享同一个Qt库,大概主应用程序已经创建了QApplication对象,并将为你运行事件循环。因此,您在库中唯一需要做的就是创建一些对象,事件循环将处理它们的事件。
如果主可执行文件不使用Qt,那么你应该在主线程中创建应用程序,启动其事件循环,并让本机事件循环为你调度事件。
唉,直接回答你的问题:大概你想在app.exec()
回来后做一些事情。然后,您的代码可以简单地:
int main(int argc, char ** argv) {
{
QApplication app{argc, argv};
MyWindow dialog;
dialog.show();
app.exec();
}
doSomething();
}
如果我关闭第一个对话框,事件循环将留下。是否可以保持事件循环?
是的。您可以清除第一个对话框的Qt::WA_QuitOnClose
属性。或者,最好将其设置在您的对话框中 - 只要有任何对话框仍处于打开状态QT::WA_QuitOnClose
应用程序就不会退出。
因此,对于第二个对话框,调用:
secondDialog->setAttribute(Qt::WA_QuitOnClose);
或者,如果您没有指向对话框的指针,则可以迭代所有顶级小部件并清除(或设置)所有小部件的属性:
for (auto widget : qApp->topLevelWidgets())
widget->setAttribute(Qt::QA_QuitOnClose, false);