以不同方式解释 QCloseEvent

Posted

技术标签:

【中文标题】以不同方式解释 QCloseEvent【英文标题】:Interpreting QCloseEvent differently 【发布时间】:2013-06-14 23:06:43 【问题描述】:

我有一个使用 Qt 用 C++ 编写的桌面 Windows 应用程序。该应用程序有几个***窗口,有时需要以编程方式关闭和重新创建这些窗口。此外,当程序的用户单击关闭按钮(最小化和最大化按钮旁边的那个)时,整个程序应该退出。

我遇到的问题是,在这两种情况下,***窗口都会收到带有 QCloseEvent 对象的 closeEvent() 调用。当我看到这种情况发生时,我想退出程序(因为用户可能已经单击了关闭按钮),但是窗口也可能正在关闭,因为我正在以编程方式删除它以重新创建它。

QMainWindow::closeEvent()中有没有办法区分这两种情况?

【问题讨论】:

【参考方案1】:

QMainWindow::closeEvent()中有没有办法区分这两种情况?

是的:用户点击窗口关闭按钮触发的关闭事件是自发事件,你调用window->close()触发的则不是。有关详细信息,请参阅QEvent::spontaneous() 的文档。

【讨论】:

【参考方案2】:

当您需要以编程方式关闭窗口时,请使用 deleteLater() 而不是 close。该窗口将被关闭并删除。要重新打开窗口,您需要创建另一个窗口对象。

您也可以使用hide() 方法。窗口将被隐藏但不会被破坏。可以使用show()再次显示。

在两种描述的情况下,关闭事件都不会发生,closeEvent() 也不会被调用。所以当closeEvent被调用时,你就知道用户按下了关闭按钮。

【讨论】:

以上是关于以不同方式解释 QCloseEvent的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式切换到不同的 PanoramaItem?

跨域请求的常用方式及解释

js中实现继承的不同方式以及其缺点

关于头部标签的信息解释

解释不同方式的自动装配 ?

解释不同方式的自动装配 ?