将QmouseEvent转换为QGraphicsSceneMouseEvent以进行拖动

时间:2013-01-28 08:25:33

标签: python qt pyqt pyside

我想移动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上执行此操作,但它不会使项目拖动。

如果没有进行此转换,是否仍然可以执行此操作,如果有必要,我该怎么办?

1 个答案:

答案 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)

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