Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何在qgraphicsview中从QGraphicsSitem获取不同的上下文菜单?_Qt_Contextmenu_Qgraphicsview_Qgraphicsitem - Fatal编程技术网

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

Qt 如何在qgraphicsview中从QGraphicsSitem获取不同的上下文菜单?,qt,contextmenu,qgraphicsview,qgraphicsitem,Qt,Contextmenu,Qgraphicsview,Qgraphicsitem,我有一个qgraphicsview,它包含一个场景,里面有一些GraphicsSitem。 我已通过setcontextmenupolicy(qt::actionscontextmenu)启用qgraphicsview中的上下文菜单,但现在我的QGraphicsSitem无法接收任何QGraphicsContextMenuEvent事件。因此,仅显示qgraphicsview的上下文菜单 我怎样才能解决这个问题 在下面的代码中,我创建了自己的场景类,继承自QGraphicscene 然后重新实现

我有一个qgraphicsview,它包含一个场景,里面有一些GraphicsSitem。 我已通过setcontextmenupolicy(qt::actionscontextmenu)启用qgraphicsview中的上下文菜单,但现在我的QGraphicsSitem无法接收任何QGraphicsContextMenuEvent事件。因此,仅显示qgraphicsview的上下文菜单


我怎样才能解决这个问题

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

然后重新实现
contextMenuEvent
I首先检查事件位置是否有项目,即我是否右键单击场景中的项目

如果是这样,我将尝试对该项目运行任何
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')

请提供一个代码示例;QGraphicsView中似乎没有函数“setContextMenu”:您是指setContextMenuPolicy吗?很抱歉,它是setContextMenuPolicy。我会更改它。只需检查是否已单击某个项目,然后直接调用该项目的上下文菜单exec函数?抱歉。但如何做到这一点,你能给出更多的提示吗?