Имам редица класове, които наследяват от 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