C++ Qt防止QDialog隐藏
在我的应用程序窗口中,所有窗口都有一个用于设置等的QDialog上下文菜单,可通过鼠标右键单击访问。在其中一个对话框中,我们希望显示一个弹出窗口(QMessageBox),警告用户操作,但Qt只允许立即打开对话框,当打开一个新对话框时,当前对话框被隐藏。当它们失去焦点时,它们也会隐藏起来,这是我需要维护的功能 我一直在看,我可以用它来捕捉隐藏事件,但我似乎无法阻止隐藏的实际发生。在事件上返回true或设置accept的组合似乎都没有任何效果C++ Qt防止QDialog隐藏,c++,qt,qt5,qevent,eventfilter,C++,Qt,Qt5,Qevent,Eventfilter,在我的应用程序窗口中,所有窗口都有一个用于设置等的QDialog上下文菜单,可通过鼠标右键单击访问。在其中一个对话框中,我们希望显示一个弹出窗口(QMessageBox),警告用户操作,但Qt只允许立即打开对话框,当打开一个新对话框时,当前对话框被隐藏。当它们失去焦点时,它们也会隐藏起来,这是我需要维护的功能 我一直在看,我可以用它来捕捉隐藏事件,但我似乎无法阻止隐藏的实际发生。在事件上返回true或设置accept的组合似乎都没有任何效果 bool windowSettings::eventF
bool windowSettings::eventFilter(QObject *object, QEvent *event)
{
if (object == this && event->type() == QEvent::Hide) {
QHideEvent *hideEvent = static_cast<QHideEvent *>(event);
hideEvent->accept(); //Should tell further event calls it has already been dealt with
return true; //Should indicate event has been dealt with
}
return false;
}
有没有一种方法可以捕获并停止隐藏,或者继续显示原始对话框,同时仍然能够与它创建的消息框进行交互?也许您可以看看这一部分,它似乎允许您在不同的窗口(对话框)中管理输入。您可以将消息框设置为弹出窗口,这很简单 创建消息框时,为其指定一个窗口标志,如下所示:
msgBox.setWindowFlags(Qt::WindowType::Popup);
这意味着它不会对后面的窗户产生任何影响
文档可以找到我想房间里的大象是:为什么你的上下文菜单继承自QDialog?屏幕上只有一个QDialog是该类的一个功能。为什么您的上下文菜单特别需要QDialog?我强烈敦促你考虑改变这一点。不幸的是,这是当前的实施,改变这将是一个巨大的事业(而不是因为可能的回归我会做些什么)。任何UI更改的首要任务都是最小化用户体验的差异。有趣的是,我们将看一看。这不起作用,但弹出标志的说明提到了使窗口成为模态<代码>QMessageBox这样做看起来不同(在我的案例中没有标题/装饰),但仍然关闭了案例中的对话框。
msgBox.setWindowFlags(Qt::WindowType::Popup);