我有某种困境。
我正在使用:
我写了一个基于QMainWindow
类的小型Qt应用程序,其中还存在 settings 对话框(QDialog
)。每个在GUI模式下都能正常工作。之后我开始更改我的项目,使其仅在托盘中可见。只需在main.cpp show()
方法中发表评论,如下所示:
MainWindow w;
//w.show();
return app.exec();
但是从托盘中,我需要启动 settings 对话框,该对话框在mainwindow.h / .cpp文件中实现。我添加到托盘菜单操作(QAction
),它启动了设置对话框。这出现了意想不到的问题:当我尝试使用[X]关闭按钮(在右上角)关闭此设置对话框时,我的应用已关闭!
以下是操作槽:
void MainWindow::onOpenSettingsDlgClicked()
{
SettingsDlg dlg( this );
dlg.exec();
}
我尝试为设置对话框类重新实现virtual reject()
方法,并且只设置hide()
函数,但该解决方案没有帮助。
我做错了什么?
谢谢!
答案 0 :(得分:5)
您应该关闭默认启用的quitOnLastWindowClosed
属性,如文档中所定义(http://doc.qt.nokia.com/latest/qapplication.html#quitOnLastWindowClosed-prop)
这就是说,您必须自己处理QApplication的终止,也可以在托盘菜单中输入[quit]条目。
答案 1 :(得分:0)
刚刚找到另一个看起来更好的选项是覆盖QDialog的closeEvent以仅隐藏它。
void PrefDialog::closeEvent(QCloseEvent *event) {
this->hide();
event->ignore();
}
我发现这似乎更好,因为它不会改变全局应用程序行为。