У меня есть несколько классов, наследуемых от QGraphicsItem
, которые должны быть организованы определенным образом. Для простоты вычислений я сделал сцены и элементы с центром в (0, 0) (где boundingRect()
имеет +/- координаты).
QGraphicsTextItem
подкласс бросает мне вызов, его pos()
относится к верхней левой точке.
Я пробовал несколько вещей, чтобы сместить его так, чтобы он центрировался в центре текста (например, предлагаемое решение здесь - указанный код фактически обрезает мой текст и показывает только нижнюю левую четверть).
Я представлял себе, что решение должно быть чем-то простым, например
void TextItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
painter->translate( -boundingRect().width()/2.0, -boundingRect().height()/2.0 );
QGraphicsTextItem::paint(painter, option, widget );
}
вышеприведенный «вид» работает, но когда я увеличиваю масштаб элемента -> увеличиваю шрифт, отображаемый элемент обрезается...
Я попытался установить pos()
, но проблема в том, что мне все еще нужно отслеживать фактическое положение на сцене, поэтому я не могу просто заменить его.
Немного неприятный побочный эффект — центрирование QGraphicsView
по элементу тоже не работает.
Как я могу заставить мой QGraphicsTextItem
показывать свое положение относительно центра текста?
Редактировать: один из экспериментов по изменению boundingRect()
:
QRectF TextItem::boundingRect() const
{
QRectF rect = QGraphicsTextItem::boundingRect();
rect.translate(QPointF(-rect.width()/2.0, -rect.height()/2.0));
return rect;
}
boundingRect()
, я получаю обрезанный текст... (см. редактирование кода) - person Thalia   schedule 04.05.2015