1

QGraphicsItem (self.rb)があります。QGraphicsRotation を使用して、このアイテムをポイント( self.originPoint )を中心に回転させたいです。しかし、以下のコードを実行しようとすると、以下のエラーが表示されます。誰か助けてくれませんか?

canvasMoveEvent self.rb.setTransform(rotationItem) TypeError: QGraphicsItem.setTransform(QTransform, bool Combine=False): 引数 1 に予期しないタイプ 'QGraphicsRotation' があります

Python バージョン: 2.7.2 (デフォルト、2011 年 6 月 12 日 15:08:59) [MSC v.1500 32 ビット (Intel)]

コード:

def canvasPressEvent(self, event):
        self.rb = QgsRubberBand(self.canvas, True)
        self.originPoint = self.rb.boundingRect().center()
        if self.rb:return                    

def canvasMoveEvent(self,event):
        if not self.rb:return
        currpoint = self.toLayerCoordinates(self.layer,event.pos())
        angle = center.azimuth( currpoint )

        rotationItem = QGraphicsRotation()
        rotationItem.setAngle = angle
        rotationItem.setOrigin = QVector3D(self.originPoint)
        self.rb.setTransform(rotationItem)
4

1 に答える 1

2

QGraphicsItem.setTransform ()関数は、最初の引数としてQTransformを取ります。不意を突かれるのは、 QGraphicsRotation がQTransformではないということです! それは別の階層にあります。QObjectから継承するQGraphicsTransformから継承します。

したがって、QGraphicsRotation を渡して QGraphicsItem を回転させることはできません。必要なことを行う QTransform を作成し、それを使用する必要があります。

または、これはおそらくはるかに簡単です - QGraphicsItem.setRotation()およびQGraphicsItem.setTransformOriginPoint()関数を使用して、変換オブジェクトを自分で作成することを心配することなく、目的の変換を適用します。

それが役立つことを願っています!

于 2013-01-04T15:47:57.757 に答える