On 24 November 2016 at 01:43, Majid Kamali <majidkamali1...@gmail.com> wrote: > Hi. Check this code: > > void centerItemInRect(QGraphicsItem *item, QRectF rect) > { > float x = rect.width() - > item->boundingRegion(item->transform()).boundingRect().width(); > x /= 2; > float y = rect.height() - > item->boundingRegion(item->transform()).boundingRect().height(); > y /= 2; > > item->setPos(x + rect.x(), y + rect.y()); > } > > This code works if you use Transformation on QGItem. It does not work if you > set scale and rotation with setRotation and setScale.
Thanks for sharing, but this does not work when the item has the ItemIgnoresTransformation flag set. I think it's simply not possible to center-align a QGSimpleTextItem without writing a custom QGItem wrapper of re-writing a simple text item from scratch... The main problem is that the bounding region/rect of the item is expressed in device coordinates (pixels), and the item transform is relative to parent (or scene) coordinates, so you cannot mix both. Chris > > > On Wed, Nov 23, 2016 at 4:15 AM, Ch'Gans <chg...@gna.org> wrote: >> >> Hi there, >> >> I'm trying to add a QGraphicsSimpleTextItem as a child of another (shape) >> item. >> I want the text to not follow scaling of the view (I use >> QGraphicsItem::ItemIgnoreTransformations flag), *and* be always >> centered on it's parent shape. >> Ideally, i'm looking at a solution that doesn't require to create a >> custom QGItem. >> >> My problem is the centering of the text item itself, without >> centering, here is what i do: >> >> ------------------------------------------------------------------------------------------ >> auto item = new ... >> ... >> auto text = new QGraphicsSimpleTextItem(item); >> text->setText(...); >> text->setFlag(QGraphicsItem::ItemIgnoresTransformations); >> auto itemCenter = QPointF(item->boundingRect().width()/2.0, >> >> item->boundingRect().height()/2.0); >> text->setPos(itemCenter); >> >> ------------------------------------------------------------------------------------------ >> >> This work fine, but (as expected) the top-left of the text is >> positioned on the center of the parent item. >> To center-align, I tried: >> >> ------------------------------------------------------------------------------------------- >> auto textCenter = QPointF(text->boundingRect().width()/2.0, >> >> text->boundingRect().height()/2.0); >> text->setTransform(QTransform::fromTranslate(-textCenter.x, -textCenter)); >> >> ------------------------------------------------------------------------------------------- >> >> But this doesn't work because textCenter is an offset in a coordinate >> system that doesn't follow view scaling... and the text transform >> seems to be applied in the "scaled space". >> >> Basically my problem is that it seems that I need a dynamic >> positioning wrt the parent that depends on the view transform... >> >> Does anyone know some tricks on how to achieve this? >> >> Thanks, >> Chris >> _______________________________________________ >> Interest mailing list >> Interest@qt-project.org >> http://lists.qt-project.org/mailman/listinfo/interest > > _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest