1

这发生在我弹出的每个从 QGraphicsItem 上的 mouseReleaseEvent 或从 QContextMenu 触发的 QDialog 上。我不明白问题是什么 - 代码很简单..

...
void MyQGfxItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
    if(event->button() == Qt::RightButton)
    {
        MyDialog someDlg;
        if(someDlg.exec())
        {

        }
    }
}
...

只要通过 OK 或 Cancel 关闭对话框,就会在触发事件的位置出现一个空的上下文菜单:

在此处输入图像描述

空白项似乎可以控制我的 QDockWidget 是隐藏还是可见。知道发生了什么吗?许多谷歌搜索让我陷入困境。

编辑 - 看起来只有在使用鼠标右键时才会发生这种情况..

4

2 回答 2

2

根据 QEvent 的文档,您应该接受不希望传播到父小部件的事件。所以在你的 mouseReleaseEvent 的某个地方,你应该添加

event->setAccepted(true);

或者

event->accept();

请注意,您可能还需要将此代码放入 mousePressEvent 中。

于 2012-04-06T02:53:52.910 回答
0

哈!知道了。看起来 QMainWindow 在一切都完成后抓住了右键单击事件。在 QMainWindow 中调用 this->setContextMenuPolicy(Qt::NoContextMenu) 会抑制它。

于 2012-04-06T03:51:00.507 回答