Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt防止QDialog隐藏_C++_Qt_Qt5_Qevent_Eventfilter - Fatal编程技术网

C++ Qt防止QDialog隐藏

C++ Qt防止QDialog隐藏,c++,qt,qt5,qevent,eventfilter,C++,Qt,Qt5,Qevent,Eventfilter,在我的应用程序窗口中,所有窗口都有一个用于设置等的QDialog上下文菜单,可通过鼠标右键单击访问。在其中一个对话框中,我们希望显示一个弹出窗口(QMessageBox),警告用户操作,但Qt只允许立即打开对话框,当打开一个新对话框时,当前对话框被隐藏。当它们失去焦点时,它们也会隐藏起来,这是我需要维护的功能 我一直在看,我可以用它来捕捉隐藏事件,但我似乎无法阻止隐藏的实际发生。在事件上返回true或设置accept的组合似乎都没有任何效果 bool windowSettings::eventF

在我的应用程序窗口中,所有窗口都有一个用于设置等的QDialog上下文菜单,可通过鼠标右键单击访问。在其中一个对话框中,我们希望显示一个弹出窗口(QMessageBox),警告用户操作,但Qt只允许立即打开对话框,当打开一个新对话框时,当前对话框被隐藏。当它们失去焦点时,它们也会隐藏起来,这是我需要维护的功能

我一直在看,我可以用它来捕捉隐藏事件,但我似乎无法阻止隐藏的实际发生。在事件上返回true或设置accept的组合似乎都没有任何效果

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);