当主窗口隐藏时,如何正确关闭QDialog

HowTo correctly close QDialog when main windows is hidden?

本文关键字:何正确 QDialog 窗口 隐藏      更新时间:2023-10-16

我有点左右为难。

我用:

    2008 <<li> msv/gh>
  • Qt 4.7.3(含Qt VS插件1.1.9)
我写了一个小的Qt应用程序,基于QMainWindow类,其中也存在设置对话框(QDialog)。每个在GUI模式下都工作得很好。在那之后,我开始改变我的项目,使它只在托盘中可见。只需在main.cpp show()方法中注释,如下所示:
MainWindow w;
//w.show();
return app.exec();
但是从托盘中,我需要启动设置对话框,这是在mainwindow.h/.cpp文件中实现的。我添加到托盘菜单操作(QAction),这是启动设置对话框。这里出现了意想不到的问题:当我试图关闭这个设置对话框与[X]关闭按钮(在右上角)我的应用程序关闭!

动作位置:

void MainWindow::onOpenSettingsDlgClicked()
{
     SettingsDlg dlg( this );
     dlg.exec();
}

我试图重新实现virtual reject()方法的设置对话框类,并设置只有hide()功能,但该解决方案没有帮助。

我做错了什么?

谢谢你!

您应该关闭quitOnLastWindowClosed属性,该属性是在文档(http://doc.qt.nokia.com/latest/qapplication.html#quitOnLastWindowClosed-prop)中定义的默认打开的

这就是说,你必须自己处理你的QApplication的终止,也许在托盘菜单中有一个[quit]条目

我发现另一个似乎更好的选择是覆盖QDialog的closeEvent,只隐藏它。

void PrefDialog::closeEvent(QCloseEvent *event) {
    this->hide();
    event->ignore();
}

我发现这似乎更好,因为它不改变全局应用程序的行为