QGraphicsTextItem:在两个方向(左和右)均等地增加大小
QGraphicsTextItem: Increasing size equally in both directions (left and right)
背景
我在 QGraphicsScene
中使用 QGraphicsTextItem
并希望将文本居中并随着时间的推移缓慢而平稳地使其变大。
对于 QGraphicsTextItem
没有 setWidth()
/setRight()
函数,我使用 setScale()
来增加大小。不过位置将保持不变,因为我还没有找到任何方法来居中对齐图形项目,所以我还需要使用 setPos()
更改位置
问题是 setPos()
和 setScale()
不能很好地结合,因为第一个使用像素而第二个是相对的
问题
如何使文本居中并在两个 (left/right) 方向均等地增加其大小?
感谢您对此的帮助!
变换是相对于一个点的,这个点可以通过函数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_())
背景
我在 QGraphicsScene
中使用 QGraphicsTextItem
并希望将文本居中并随着时间的推移缓慢而平稳地使其变大。
对于 QGraphicsTextItem
没有 setWidth()
/setRight()
函数,我使用 setScale()
来增加大小。不过位置将保持不变,因为我还没有找到任何方法来居中对齐图形项目,所以我还需要使用 setPos()
问题是 setPos()
和 setScale()
不能很好地结合,因为第一个使用像素而第二个是相对的
问题
如何使文本居中并在两个 (left/right) 方向均等地增加其大小?
感谢您对此的帮助!
变换是相对于一个点的,这个点可以通过函数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_())