【发布时间】:2016-06-10 19:02:24
【问题描述】:
我有一个带有单个对话框窗口的 Qt 应用程序。主要是这样的:
QApplication a(argc, argv);
MyObject * myMobject = new QObject(&a);
MainWindow w;
w.show();
return a.exec();
MyObject构造函数创建一个临时文件,析构函数将其删除。
当我通过关闭对话框正常关闭应用程序时,MyObject 析构函数按预期调用,因为它是QApplication 的子代,它在main() 的堆栈上分配。
但是,当用户会话关闭时(注销、关机等),文件并没有被删除,这表明MyObject 析构函数从未被调用。
这是什么原因?我虽然在会话关闭之前 Windows 正在关闭每个窗口,但看起来我的进程已终止。
从文档中,有QCoreApplication::aboutToQuit() 信号。但是这个文档告诉 Qt 检测到关闭并退出事件循环,并在最后发出该信号。
如果确实如此,a.exec() 应该返回,就像关闭窗口时一样,QApplication 应该与其子级一起销毁,调用 MyObject 析构函数。换句话说,由于myObject 是a 的子级,因此不需要处理aboutToQuit() 信号。
【问题讨论】:
-
我在最后添加了一些关于此的信息。其他帖子没有回答问题