【问题标题】:Pyqt QgraphicsItem context menu overriden by QGraphicsView contextmenuPyqt QgraphicsItem 上下文菜单被 QGraphicsView contextmenu 覆盖
【发布时间】:2013-10-22 00:49:18
【问题描述】:

我正在使用经典的 QgraphicsView / QGraphicsScene / QGraphicsItem 框架。 我在 QgraphicsView 中声明了一个上下文菜单:

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

然后是:

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

  etc ...

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

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

问题在于 QGraphicsItem 事件完全被 QGraphicsView 覆盖。 我应该如何着手获得它们?

【问题讨论】:

    标签: python pyqt contextmenu pyqt4 qgraphicsview


    【解决方案1】:

    我是用 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());
        }
    }
    

    在图形项中:

    void MyGraphicsItem::contextMenuEvent(QGraphicsSceneContextMenuEvent * event)
    {
        QMenu *menu = new QMenu;
        menu->addAction("Action 1");
        menu->addAction("Action 2");
        menu->popup(event->screenPos());
        event->setAccepted(true);
    }
    

    【讨论】:

      【解决方案2】:

      好的,我找到了解决办法:

      我正在使用 QGraphicsScene contextMenuEvent 而不是其他 2 个。 在事件中,我正在检查鼠标是否在 QGraphicsItem 上方,然后构建 对应的菜单。 我不太喜欢这个解决方案,因为我的所有功能都在 QGraphicsScene 类下,其中大部分都与项目有关,而不是场景。 所以它有点乱,但它有效。 提前感谢任何有更好解决方案的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-21
        • 2010-09-23
        • 2012-08-08
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多