问题描述
对不起,我的英语不是我的母语。
我有一个问题-我需要在QGraphicsSimpleTextItem中居中放置文本。我从QGraphicsSimpleTextItem继承了我的课程。我需要重写paint()
方法还是应该怎么做?
我已经在tightBoundingRect()
中阅读了QFontMetrics
。我可以在QGraphicsSimpleTextItem中设置紧密边界rect的位置吗?
感谢您的帮助!
解决方法
也许类似的东西可以工作。
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(),QString::number(itemIndex));
,您可以在其中使用boundingRect()以及标记Qt :: AlignCenter。
QGraphicsSimpleTextItem
足够大,可以容纳文本,因此在文本中 之内的对齐是没有意义的。
您可能要做的是相对于其他项目放置整个项目。您不需要子类QGraphicsSimpleTextItem
。而是使用QGraphicsItem::setPos
完成此操作。结果,该文本看起来将以某种方式对齐,例如居中。