Сохранение относительной дочерней позиции после применения QGraphicsItem ::ItemIgnoresTransformations

У меня есть QGraphicsTextItem, связанный с QGraphicsItem. Я хочу, чтобы QGraphicsTextItem всегда располагался непосредственно над QGraphicsItem, но я также хочу, чтобы текст оставался того же размера, когда коэффициент масштабирования становится меньше 1, т. элемент масштабируется меньше. Я обнаружил, что установка флага QGraphicsItem::ItemIgnoresTransformationsв значение true, когда коэффициент масштабирования ниже 1, помогает сохранить размер.

Но я не могу найти способ, чтобы текст всегда оставался над QGraphicsItem. Есть ли способ сделать это? Я попытался использовать функцию deviceTransform (), но текст по-прежнему смещался с QGraphicsItem при прокрутке. Хуже всего то, что некоторые элементы текста начали «трястись», т. е. они начали постоянно менять свое положение, чуть-чуть, так что казалось, что они трясутся. Если это та функция, которую мне нужно использовать, я думаю, я не знаю, как ее правильно использовать.

В конструкторе моего QGraphicsItem я добавил QGraphicsTextItem:

fTextItem = new QGraphicsTextItem(getName(), this);
fTextItem->setFlag(QGraphicsItem::ItemIgnoresTransformations);

Вот фрагмент кода из функции рисования QGraphicsItem

qreal lod = painter->worldTransform().m22();
if(lod <= 1.0) {
     fTextItem-setFlag(QGraphicsItem::ItemIgnoresTransformations);
     fTextItem->setPos(fTextItem->deviceTransform(view-viewportTransform()).inverted().map(view->mapFromScene(mapToScene(0,0))));
} else {
     fTextItem->setFlag(QGraphicsItem::ItemIgnoresTransformations, false);
     fTextItem->setPos(0, 0);
}
8
задан KD07 12 July 2012 в 19:34
поделиться