无模式QDialog:应用程序退出时不调用closeEvent()?

时间:2011-02-04 22:47:28

标签: c++ qt

我有一个无模式对话框,它会覆盖closeEvent()以保存其状态。如果我实际关闭对话框,这工作正常。但是,如果我只是以任何方式退出应用程序(这当然会导致我的对话框关闭),那么closeEvent()永远不会被调用。

这是设计的吗?这是一个Qt错误吗?是否有类似于我需要在窗口小部件上设置的属性,以告诉它在应用程序关闭时接收关闭事件?

我想我可以在对话框的析构函数中复制“保存状态”代码,但如果我不必这样做会更好。

感谢您的任何想法!

2 个答案:

答案 0 :(得分:3)

也许您可以使用棘手的解决方案:只需从MainWindow的closeEvent调用对话框的closeEvent,将QCloseEvent对象作为参数传递。例如:

void QtMainWindowTest::closeEvent(QCloseEvent *ev)
{
    _dlg ->closeEvent(ev);
}

答案 1 :(得分:1)

Qt中存在一个错误,当应用程序通过菜单命令退出(而不是关闭最后一个QMainWindow)时,事件系统没有正确关闭,堆上的对象只是泄漏。它基本上只是立即调用exit();

我在Mac平台上为此提交了bug。我不知道你的平台是什么,以及它是否也受到影响。