如何在qgraphicsview中从qgraphicsitem获取不同的上下文菜单?

时间:2014-10-08 07:46:44

标签: qt contextmenu qgraphicsview qgraphicsitem

我有一个qgraphicsview它包含一个场景,里面有一些graphicsitem。 我已经通过setcontextmenupolicy(qt :: actionscontextmenu)在qgraphicsview中启用了上下文菜单,但现在我的qgraphicsitem无法接收任何qgraphicsscenecontextmenuevent事件。因此,只出现qgraphicsview的上下文菜单。

我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:1)

在下面的代码中,我创建了自己的场景类,继承自QGraphicsScene

然后重新实施contextMenuEvent我首先检查事件位置是否有项目,即我是否正确点击了场景中的项目。

如果是这样,那么请尝试在该项目上运行任何contextMenuEvent

如果没有项目,或者它没有自己的contextMenuEvent生病,只需运行场景的上下文事件版本。

将PySide.QtGui导入为QtGui 将PySide.QtCore导入为QtCore

import PySide.QtGui as QtGui
import PySide.QtCore as QtCore

class MyScene(QtGui.QGraphicsScene):

    def __init__(self, *args, **kwargs):
        super(self.__class__, self).__init__(*args, **kwargs)

    def contextMenuEvent(self, event):
        # Check it item exists on event position
        item = self.itemAt(event.scenePos().toPoint())
        if item:
            # Try run items context if it has one
            try:
                item.contextMenuEvent(event)
                return
            except:
                pass

        menu = QtGui.QMenu()
        action = menu.addAction('ACTION')