Python 将QmouseEvent转换为用于拖动移动的QGraphicsSceneMouseEvent
我想移动qgraphicscene,而不是移动我的整个小部件(由于小部件超出了限制,导致了一些图形故障) 这就是我试图做的: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()
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)