以不同方式解释QCloseEvent

时间:2013-06-14 23:06:44

标签: c++ windows qt qwidget

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

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

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

2 个答案:

答案 0 :(得分:4)

  

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

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

答案 1 :(得分:2)

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

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

在两种情况下,都不会发生关闭事件,也不会调用closeEvent()。因此,当调用closeEvent时,您知道用户已按下关闭按钮。