Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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
Python 将QmouseEvent转换为用于拖动移动的QGraphicsSceneMouseEvent_Python_Qt_Pyqt_Pyside - Fatal编程技术网

Python 将QmouseEvent转换为用于拖动移动的QGraphicsSceneMouseEvent

Python 将QmouseEvent转换为用于拖动移动的QGraphicsSceneMouseEvent,python,qt,pyqt,pyside,Python,Qt,Pyqt,Pyside,我想移动qgraphicscene,而不是移动我的整个小部件(由于小部件超出了限制,导致了一些图形故障) 这就是我试图做的: def mousePressEvent(self, event): #super(SvgView, self).mousePressEvent(event) self.svgItem.mousePressEvent(event) self.x += event.pos().x() self.y += event.pos().y()

我想移动qgraphicscene,而不是移动我的整个小部件(由于小部件超出了限制,导致了一些图形故障)

这就是我试图做的:

def mousePressEvent(self, event):
    #super(SvgView, self).mousePressEvent(event)

    self.svgItem.mousePressEvent(event)

    self.x += event.pos().x()
    self.y += event.pos().y()
    event.accept()
(注意,我没有以正确的方式更新我的self.x和self.y,因为这是一个“拖动”运动,我应该放上“delta”,但我不知道如何获得它)

这不起作用,因为svgItem需要一个
qgraphicscsceneouseevent

我尝试在场景中执行此MouseeEvent,而不是在QGraphicsView上执行,但它不会使项目拖动


在不进行这种转换的情况下,是否还有其他方法可以做到这一点?如果有必要,我如何做到这一点?

对我来说,SVG+Javascript非常容易理解,我可以用它做任何我想做的事情。但我正在为桌面应用程序的PyQt而挣扎。Avaris帮助我了解Qt中的事件传播。 我写了几行文字来做实验,但也许这会对你有所帮助。不是最好的,而是“eppur si muove”:


对于您的背景,不要子类化,将其构建为单独的类。

对我来说,SVG+Javascript非常容易理解,我可以用它做任何我想做的事情。但我正在为桌面应用程序的PyQt而挣扎。Avaris帮助我了解Qt中的事件传播。 我写了几行文字来做实验,但也许这会对你有所帮助。不是最好的,而是“eppur si muove”:


对于您的背景,不要子类化,将其构建为单独的类。

“我想移动QGraphicscene而不是移动我的整个小部件”这毫无意义,移动
QGraphicscene
不会移动
QGraphicsView
,反之亦然。请解释你想做什么。我的观点有一个我不想改变的背景。我只想移动视图中的项目(svg+其背景和边框)。我是一个完全的Qt初学者,所以我可能误解了一件事,或者太误解了场景:-)!因此,即使在场景周围平移,您也不希望背景相对于视图移动?你所说的“在我看来的项目”是什么意思?视图不包含任何内容,仅包含场景。如果要在
qgraphicscene
中移动
QGraphicsItems
,可以使用默认的拖放功能。您只需使项目可选择且可移动。“我想移动QGraphicscene,而不是移动我的整个小部件”这没有意义,移动
QGraphicscene
不会移动
QGraphicsView
,反之亦然。请解释你想做什么。我的观点有一个我不想改变的背景。我只想移动视图中的项目(svg+其背景和边框)。我是一个完全的Qt初学者,所以我可能误解了一件事,或者太误解了场景:-)!因此,即使在场景周围平移,您也不希望背景相对于视图移动?你所说的“在我看来的项目”是什么意思?视图不包含任何内容,仅包含场景。如果要在
qgraphicscene
中移动
QGraphicsItems
,可以使用默认的拖放功能。您只需将项目设置为可选择和可移动。
from PySide import QtGui, QtCore

class View(QtGui.QGraphicsView): # as separate class
    def BlahBlah():
        print dir()

class Scene_w_ellipse(QtGui.QGraphicsScene):
    def __init__(self):
        super(Scene_w_ellipse, self).__init__()
        self.setSceneRect(0,0,300,200)
        self.C = QtGui.QGraphicsEllipseItem(-4,-20,80,40)
        self.C.setPos(100,70)
        self.C.setFlags(QtGui.QGraphicsItem.ItemIsMovable)
        #self.C.mousePressEvent(QtGui.QGraphicsSceneMouseEvent)
        self.addItem(self.C)

    def mousePressEvent(self, event):
        print dir()

    def mouseMoveEvent(self, event):
        self.C.mouseMoveEvent(event)

    def mouseReleaseEvent(self, event):
        self.C.mouseReleaseEvent(event)