如何确认QApplication的成功退出

时间:2014-08-15 22:47:31

标签: qt exit qapplication

我正在开发一个使用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的成功退出?

1 个答案:

答案 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()