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を正しい方法で更新していないことに注意してください。ただし、取得方法がわかりませんそれ)

svgItem はQGraphicsSceneMouseEvent.

QGraphicsView ではなくシーンでこの mouseEvent を実行しようとしましたが、アイテムがドラッグされません。

この変換を行わずにこれを行う方法はありますか?必要な場合はどうすればよいですか?

4

1 に答える 1

1

私にとってSVG+Javascriptは非常に理解しやすく、それを使ってやりたいことが何でもできます。しかし、私はデスクトップアプリ用のPyQtに苦労しています。Avarisは、Qtでのイベント伝播について何かを理解するのに役立ちます。私は実験のために数行を書きましたが、多分それはあなたを助けるかもしれません。最高ではありませんが、「eppur simuove」:

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 に答える