我有一个qgraphicsview,它包含一个场景,里面有一些图形项。我已经通过setcontextmanupolicy(qt::actionscontextmenu)在qgraphicsview中启用了上下文菜单,但现在我的qgraphicitem无法接收任何qgraphicscenecontextmenuevent事件。因此,只会出现qgraphicsview的上下文菜单。
我该如何解决这个问题?
在下面的代码中,我创建了自己的场景类,继承了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')