1

我正在开发一个使用 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() 函数返回真值。湾。还有其他方法可以确认QApplication成功退出吗?

4

1 回答 1

0

根据“成功退出”的含义,最直接的方法是检查exec(). 您可以通过使用exit(int returnCode)而不是quit()退出您的应用程序来控制它。

由于您想等待所有 QObjects 被破坏,因此一种简单的方法是将 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;
}

但是,正如 docs 中所说exec(),应用程序可能会在它有机会从事件循环返回之前被杀死,即使在计算机关闭时的“正常”使用中也是如此。但我不确定你能做些什么,除了连接aboutToQuit()信号以更早地捕捉退出,也许做一些像刷新所有打开的文件等,以避免数据损坏。

如果您对这样做不满意,还有旧的atexit().

于 2014-08-16T05:00:43.043 回答