Qt 如何确认QApplication成功退出

Qt 如何确认QApplication成功退出,qt,exit,qapplication,Qt,Exit,Qapplication,我正在从事一个使用Qt进行GUI开发的项目。Qt事件循环在主线程中启动。但我需要在QApplication退出后执行一些清理活动 因此,我使用qApp->quit()退出应用程序,并确认qApp应用程序成功退出,我依赖qApp->closingDown()的返回值,如下所示 if ( true == qApp->closingDown()) { //Successfull exit of the QApplication. Do post exit operations } 问题

我正在从事一个使用Qt进行GUI开发的项目。Qt事件循环在主线程中启动。但我需要在QApplication退出后执行一些清理活动

因此,我使用qApp->quit()退出应用程序,并确认qApp应用程序成功退出,我依赖qApp->closingDown()的返回值,如下所示

if ( true == qApp->closingDown())
{
    //Successfull exit of the QApplication. Do post exit operations
}
问题: A.qApp->quit()是否立即使qApp->closingDown()函数返回真值。
B是否有其他方法确认QApplication成功退出?

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

由于您希望等待所有QoObject被销毁,一种简单的方法是将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;
}
intmain(intargc,char*argv[]){
int returnCode=127;//选择任何sentinel值
{
//将所有Qt内容放在这个范围内
QApplication应用程序(argc、argv);
//...
returnCode=app.exec();
//如果存在任何没有父对象的原始指针堆QObject,请在此处删除它们
}
如果(返回代码!=0){

您可能需要查看
qAddPostRoutine
。请参阅定义“成功退出QApplication”。我的上下文中的成功退出是,必须销毁所有QObject,QApplication不应处理任何事件。我的上下文中的成功退出是,必须销毁所有QObject,QApplication不应处理任何事件。在我们的应用程序中,我们需要调用“退出(someExitCode)”从inturn为清理活动运行注册的退出处理程序的不同线程。若要从其他线程调用exit(),其他线程必须确保QApplication已退出(事件循环已退出)Qt事件循环中不再处理任何事件。qAppPostRoutine在这方面有帮助吗?或者有什么最好的方法解决我的问题?谢谢Regards@SRaju根据您上面的评论编辑了答案。感谢您的回答。Qt文档显示QApplication::exec()在某些平台中不会返回。因此,我正在尝试实现通用解决方案,以帮助确定所有平台中的QApplication exit状态。我正在尝试使用QCoreApplication::aboutToQuit()信号并将其连接到插槽。对此方法有何建议?