gpt4 book ai didi

c++ - QApplication 子对象在系统关闭时不会被销毁

转载 作者:太空狗 更新时间:2023-10-29 21:15:27 24 4
gpt4 key购买 nike

我有一个带有单个对话框窗口的 Qt 应用程序。主要看起来像这样:

QApplication a(argc, argv);
MyObject * myMobject = new QObject(&a);
MainWindow w;
w.show();
return a.exec();

MyObject 构造函数创建一个临时文件,析构函数将其删除。

当我通过关闭对话框正常关闭应用程序时,MyObject 析构函数按预期被调用,因为它是 QApplication 的子级,分配在堆栈中main().

但是,当用户 session 关闭(注销、关机...)时,文件不会被删除,这表明 MyObject 析构函数从未被调用。

这是什么原因?我虽然 Windows 在 session 关闭之前关闭了每个窗口,但看起来我的进程已终止。

在文档中,有 QCoreApplication::aboutToQuit() 信号。但是这个文档告诉 Qt 检测到关闭并退出事件循环,并在最后发出该信号。

如果情况确实如此,a.exec() 应该返回,就像窗口关闭时一样,QApplication 应该连同它的 child 一起销毁,调用MyObject 析构函数。换句话说,由于 myObjecta 的子项,因此不需要处理 aboutToQuit() 信号。

最佳答案

直接来自 QApplication 的文档:

We recommend that you connect clean-up code to the aboutToQuit() signal, instead of putting it in your application's main() function. This is because, on some platforms the QApplication::exec() call may not return. For example, on the Windows platform, when the user logs off, the system terminates the process after Qt closes all top-level windows. Hence, there is no guarantee that the application will have time to exit its event loop and execute code at the end of the main() function, after the QApplication::exec() call.

关于c++ - QApplication 子对象在系统关闭时不会被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37755487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com