1

我有一个QGraphicsItem (self.rb)。我想使用QGraphicsRotation围绕一个点(self.originPoint)旋转这个项目。但是当我尝试执行下面的代码时,它给了我下面显示的错误。有人可以帮忙吗?

在 canvasMoveEvent self.rb.setTransform(rotationItem) TypeError: QGraphicsItem.setTransform(QTransform, bool combine=False): argument 1 has unexpected type 'QGraphicsRotation'

Python 版本:2.7.2(默认,2011 年 6 月 12 日,15:08:59)[MSC v.1500 32 位(英特尔)]

代码:

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!它处于不同的层次结构中;它继承自QGraphicsTransform,后者继承自QObject

所以你不能传入一个 QGraphicsRotation 来旋转你的 QGraphicsItem,这是违反直觉的。您必须制作一个 QTransform 来满足您的需求,并使用它。

或者 - 这可能更容易 - 使用QGraphicsItem.setRotation()QGraphicsItem.setTransformOriginPoint()函数来应用您想要的转换,而不必担心自己创建任何转换对象。

希望有帮助!

于 2013-01-04T15:47:57.757 回答