我正在开发一个使用Qt进行GUI开发的项目。 Qt事件循环在主线程中启动。但是我要求在QApplication退出后进行一些清理活动。
所以我使用qApp-> quit()退出应用程序并确认QApplication的成功退出,我依赖于qApp-> closingDown()的返回值,如下所示
if ( true == qApp->closingDown())
{
//Successfull exit of the QApplication. Do post exit operations
}
问题: 一个。 qApp-> quit()会立即使qApp-> closingDown()函数返回true值。 湾有没有其他方法可以确认QApplication的成功退出?
答案 0 :(得分:0)
根据您的意思"成功退出",最直接的方法是检查exec()
的返回值。您可以使用exit(int returnCode)
代替quit()
来退出应用程序来控制它。
由于您希望等待所有QObject被破坏,因此一种方法是将QApplication包装到范围中,例如:
int main(int argc, char *argv[]) {
int returnCode = 127; // choose whatever sentinel value
{
// put all Qt stuff in this scope
QApplication app(argc, argv);
//...
returnCode = app.exec();
// if there are any raw pointer heap QObjects without parent, delete them here
}
if (returnCode != 0) {
std::cerr << "Error, exit code: " << returnCode << std::endl;
}
// do whatever cleanup you want to do after Qt stuff has been shut down
// or signal the other thread, or whatever
return returnCode;
}
但是,正如在exec()
的文档中所述,应用程序可能会在它有机会从事件循环返回之前被杀死,即使在&#34; normal&#34;在计算机关闭时使用。但是我不确定你能做些什么,除了连接aboutToQuit()
信号以便先赶去退出,或者做一些事情,比如刷新所有打开的文件等,以避免数据损坏。
如果您不喜欢这样做,那么还有好的atexit()
。