1

对不起,我的英语不是我的母语。

我有一个问题 - 我需要将 QGraphicsSimpleTextItem 中的文本居中。我从 QGraphicsSimpleTextItem 继承了我的类。我需要重写该paint()方法还是应该怎么做?

tightBoundingRect()QFontMetrics. 我可以在 QGraphicsSimpleTextItem 中设置紧密边界矩形的位置吗?

谢谢你的帮助!

4

2 回答 2

2

也许这样的事情可以奏效。

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。

于 2020-09-24T09:36:01.437 回答
1

QGraphicsSimpleTextItem刚好足以容纳文本,因此项目的文本对齐没有意义。

那,你可能会做的是,将整个项目相对于其他项目定位。您不需要子类化QGraphicsSimpleTextItem. 相反,使用QGraphicsItem::setPos来实现这一点。结果,文本将出现以某种方式对齐,例如居中。

于 2020-09-24T09:52:58.417 回答