我想移动QGraphicsScene而不是移动我的整个小部件(由于小部件移动限制而导致一些图形故障)。
这就是我试图做的事情:
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,因为这是一个“拖动”运动而我应该把“三角洲”改为,但我不知道怎么弄它)
这不起作用,因为svgItem需要QGraphicsSceneMouseEvent
。
我尝试在场景中执行此mouseEvent,而不是在QGraphicsView上执行此操作,但它不会使项目拖动。
如果没有进行此转换,是否仍然可以执行此操作,如果有必要,我该怎么办?
答案 0 :(得分:1)
对我来说SVG + Javascript是非常容易理解的,有了它,我可以随心所欲。但我正在与PyQt争夺桌面应用程序。 Avaris帮助我理解Qt中的事件传播。 我写了几行进行实验,但也许它可以帮到你。不是最好的,但是“eppur si muove”:
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)
对于您的背景,请不要将其子类化,将其构建为单独的类。