2

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

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

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

4

2 回答 2

4

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

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

于 2013-06-15T09:09:14.610 回答
2

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

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

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

于 2013-06-15T08:19:09.137 回答