Pyqt QgraphicsItem context menu overriden by QGraphicsView contextmenu

2024-09-25 08:40:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个经典的QgraphicsView/qgraphicscene/QGraphicsItem框架中工作。 我在QgraphicsView中声明一个上下文菜单:

    self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
    self.customContextMenuRequested.connect(self.__contextMenu)

后来:

^{pr2}$

然后在QGraphicsItem实例类中,我使用contextMenuEvent,如下所示:

# ---------------------------------------------------------------------------
def contextMenuEvent(self, event):
  """ """
  # ----> Creating Context menu -----------------------------------
  oTreeMenu = QtGui.QMenu()

问题是QGraphicsItem事件被QGraphicsView完全覆盖。 我该如何处理这两个问题?在


Tags: self框架声明connect菜单qt经典qtcore
2条回答

我找到了一个解决方案:

我使用的是qgraphicsceneContextMenuEvent,而不是另外两个。 在事件中,我检查鼠标是否在QGraphicsItem上方,并构建相应的菜单。在

我真的不喜欢这个解决方案,因为我所有的函数都在qgraphicscene类下,而且大多数函数都与项目有关,而不是场景。所以这有点乱,但是很管用。在

还是希望看到更好的解决方案。在

我用C++做的,但我觉得应该有用

在图形视图中:

void MyGraphicsView::contextMenuEvent(QContextMenuEvent * event)
{
    QGraphicsView::contextMenuEvent(event);
    if(!event->isAccepted())
    {
        QMenu * menu  = new QMenu;
        menu->addAction("GraphicsView Action 1");
        menu->addAction("GraphicsView Action 2");
        menu->popup(event->globalPos());
    }
}

在GraphicsItem中:

^{pr2}$

相关问题 更多 >