对不起,我的英语不是我的母语。
我有一个问题 - 我需要将 QGraphicsSimpleTextItem 中的文本居中。我从 QGraphicsSimpleTextItem 继承了我的类。我需要重写该paint()
方法还是应该怎么做?
我tightBoundingRect()
在QFontMetrics
. 我可以在 QGraphicsSimpleTextItem 中设置紧密边界矩形的位置吗?
谢谢你的帮助!
对不起,我的英语不是我的母语。
我有一个问题 - 我需要将 QGraphicsSimpleTextItem 中的文本居中。我从 QGraphicsSimpleTextItem 继承了我的类。我需要重写该paint()
方法还是应该怎么做?
我tightBoundingRect()
在QFontMetrics
. 我可以在 QGraphicsSimpleTextItem 中设置紧密边界矩形的位置吗?
谢谢你的帮助!
也许这样的事情可以奏效。
void MySimpleTextItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
QFont numberFont = QFont("Helvetica [Cronyx]", 20);
painter->setFont(numberFont);
painter->drawText(boundingRect(), Qt::AlignCenter, QString::number(itemIndex));
}
在我的例子中,这段代码是在 QGraphicsEllipseItem 内绘制一个数字,以椭圆为中心。我对我的代码进行了一些调整以适合您的情况,但这里的重点是painter->drawText(boundingRect(), Qt::AlignCenter, QString::number(itemIndex));
,您使用 boundingRect() 和标志 Qt::AlignCenter。
QGraphicsSimpleTextItem
刚好足以容纳文本,因此项目内的文本对齐没有意义。
那,你可能会做的是,将整个项目相对于其他项目定位。您不需要子类化QGraphicsSimpleTextItem
. 相反,使用QGraphicsItem::setPos
来实现这一点。结果,文本将出现以某种方式对齐,例如居中。