Как центрировать текст в QGraphicsSimpleTextItem?

Извините за мой английский, это не мой родной язык.

У меня проблема - мне нужно центрировать текст в моем QGraphicsSimpleTextItem. Я унаследовал свой класс от QGraphicsSimpleTextItem. Мне нужно переопределить метод paint() или что мне делать?

Я прочитал о tightBoundingRect() в QFontMetrics. Могу ли я установить положение узкого ограничивающего прямоугольника в QGraphicsSimpleTextItem?

Спасибо за вашу помощь!


person kristian307    schedule 24.09.2020    source источник


Ответы (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.

person George    schedule 24.09.2020

QGraphicsSimpleTextItem достаточно большой, чтобы вместить текст, поэтому выравнивание текста внутри элемента не имеет смысла.

Это то, что вы можете сделать, это расположить весь элемент по отношению к другим элементам. Вам не нужно создавать подкласс QGraphicsSimpleTextItem. Вместо этого используйте для этого QGraphicsItem::setPos. В результате текст будет каким-то образом выровнен, например. по центру.

person scopchanov    schedule 24.09.2020
comment
@kristian307, не могли бы вы ответить? - person scopchanov; 17.11.2020