关闭从mouseReleaseEvent RightClick启动的QDialog会导致出现空白上下文菜单

时间:2012-04-06 00:54:06

标签: qt contextmenu mouseevent qgraphicsitem qdialog

对于从QGraphicsItem上的mouseReleaseEvent或QContextMenu触发的每个QDialog I pop都会发生这种情况。我不知道问题是什么 - 代码非常简单..

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

        }
    }
}
...

关闭对话框后,无论是通过“确定”还是“取消”,都会出现触发事件的空上下文菜单:

enter image description here

如果我的QDockWidget隐藏或可见,空白项似乎可以控制..任何想法是怎么回事?许多谷歌搜索让我陷入困境。

编辑 - 看起来只有在使用鼠标右键时才会出现这种情况。

2 个答案:

答案 0 :(得分:2)

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

event->setAccepted(true);

event->accept();

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

答案 1 :(得分:0)

哈!得到它了。看起来QMainWindow在完成所有操作后抓取右键单击事件。在QMainWindow中调用this-> setContextMenuPolicy(Qt :: NoContextMenu)会抑制它。