0

背景

QGraphicsTextItem在 a 内使用QGraphicsScene并希望将文本居中并随着时间的推移缓慢而平稳地使其变大。

因为QGraphicsTextItem没有setWidth()/setRight()功能,所以我用它setScale()来增加大小。位置将保持不变,因为我还没有找到任何方法来居中对齐图形项,所以我还需要使用更改位置setPos()

问题在于,setPos()setScale()没有很好地结合起来,因为第一个使用像素,第二个是相对的

问题

如何使文本居中并在两个(左/右)方向上均等地增加其大小?

感谢您对此的帮助!

4

1 回答 1

1

变换是关于一个点的,这个点可以通过函数 setTransformOriginPoint() 来改变,因为它要求对象不移动,只缩放,然后你必须在项目的中心建立那个点。

item.setTransformOriginPoint(item.boundingRect().center())
item.setScale(factor)

例子:

if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    w = QGraphicsView()
    w.setScene(QGraphicsScene(QRectF(0, 0, 640, 480)))
    w.show()
    it = QGraphicsTextItem("test")
    w.scene().addItem(it)
    it.setPos(320, 240)
    it.setTransformOriginPoint(it.boundingRect().center())
    timeline = QTimeLine()
    timeline.setFrameRange(1, 10)
    timeline.setCurveShape(QTimeLine.CosineCurve)
    timeline.frameChanged.connect(it.setScale)
    timeline.start()
    sys.exit(app.exec_())
于 2017-12-15T02:43:35.833 回答