1

我想移动 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,因为这是一个“拖动”运动,我应该改为放置“delta”,但我不知道如何获得它)

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

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

无论如何都可以在不进行此转换的情况下执行此操作,如果有必要,我该怎么做?

4

1 回答 1

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)

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

于 2013-02-05T15:13:57.937 回答