【发布时间】:2017-01-03 09:40:57
【问题描述】:
我正在寻找有关在调用 Qt 应用程序的 quit() 之后/期间发生的事情的文档。这个问题源于我在处理quit() 上打开的QDialogs 的返回值时遇到的问题。我想澄清以下顺序:
- QCoreApplication::quit() 或 QApplication::quit() 被调用
- QDialogs 不调用 QWidget::closeEvent()。似乎所有打开的对话框都通过调用其reject() 方法自动关闭。这是最重要的部分,这种行为是否有保证?
- “事件循环阻塞”QDialog::exec() 方法返回,调用者必须小心处理(访问已删除对象的成员,...)。
- 发出 aboutToQuit 信号
- 应用程序的析构函数被调用
所以程序流程是: 只要打开模式对话框,该对话框的事件循环就会运行。当调用 quit() 时,QDialog::exec()(模态对话框的事件循环)正在返回,这可能意味着运行了许多额外的代码,甚至信号/插槽在同一线程中时也可以执行。然后正常的事件循环就不再处理了,只是调用了toQuit()和析构函数。
这个描述正确吗?有人可以指出我解释quit() 和QDialog 交互的Qt 文档吗?当我在 QDialog 的 exec() 由于 quit() 调用而返回之后调用 QDialog 的 exec() 会发生什么?那么谁在关闭这个 QDialog?
谢谢,我对所有这些交互有点困惑。
编辑: 如果之前调用了 quit() 方法,对 QDialog 的 exec() 的调用似乎会被拒绝。所以我猜 Qt 内部知道应用程序即将退出,所以所有进一步的 QDialogs 立即返回“rejected”。
【问题讨论】: