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

mos*_*osg 3 c++ qt

我有某种困境.

我正在使用:

  • MSVS 2008
  • Qt 4.7.3(使用Qt VS插件1.1.9)

我写了一个基于QMainWindow类的小Qt应用程序,其中也存在设置对话框(QDialog).每个在GUI模式下都能正常工作.之后我开始改变我的项目,使其仅在托盘中可见.只需在main.cpp show()方法中注释,如下所示:

MainWindow w;
//w.show();

return app.exec();
Run Code Online (Sandbox Code Playgroud)

但是从托盘中,我需要启动设置对话框,该对话框在mainwindow.h/.cpp文件中实现.我添加到托盘菜单操作(QAction),它启动该设置对话框.这出现了意想不到的问题:当我尝试用[X]关闭按钮(在右上角)关闭此设置对话框时,我的应用程序已关闭!

这是动作槽:

void MainWindow::onOpenSettingsDlgClicked()
{
     SettingsDlg dlg( this );
     dlg.exec();
}
Run Code Online (Sandbox Code Playgroud)

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

我做错了什么?

谢谢!

azf*_*azf 5

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

这就是说,您必须自己处理QApplication的终止,也可以在托盘菜单中输入[quit]条目.