Solved Issue with rotating a QGraphicsRectItem
-
Hi All,
I am facing an issue with the incremental rotation of QGraphicsRectItem.
I have added a QGraphicsRectItem in the scene and rotated it using the setTransform API. ( say by angle = 60 degree )
Now I want to update the item with 90 degree rotation. So the steps which I followed are,
- setRect( originPt, width, height )
- setTransform( 90 degree )
Now I did this, based on the assumption that setRect will update the exisitng rectangle with origin point, width, height and 0 degree. And then calling a setTransform with 90 degree shall fix the job. But the setRect is not updating the angle part of the item, which is existing and as a result, it is drawing an additional 90 degree on the already rotated item. I find this quite confusing.
Could any one kindly help with providing more information on the setRect API ?
Thanks in advance,
San -
Hi,
setRect
does exactly what is described: it sets the item's rectangle. It doesn't modify the transformation you did.How exactly are you applying the transformation ?
-
QLineF diagonal( pointsVec.at( 0 ), pointsVec.at( 2 ) ); QPointF rotatedCenter( pointsVec.at( 0 ).x() + ( diagonal.dx()/2 ), pointsVec.at( 0 ).y() + ( diagonal.dy()/2 ) ); QLineF yaxis( 0, 0, 0, -10 ); QLineF angleLine( pointsVec.at( 3 ), pointsVec.at( 0 ) ); qreal angie = yaxis.angleTo( angleLine ); box->setAngle( angie ); qreal angleValue = -1 * box->angle(); QPointF center = box->boundingRect().center(); QTransform transform; QPointF pt = rotatedCenter - center; transform.translate( pt.x(), pt.y() ); transform.translate( center.x(), center.y()); transform.rotate( angleValue ); transform.translate(-center.x(), -center.y()); box->setTransform( transform, true);
-
Hi @SGaist ,
The issue I am having is that, I have the absolute angle value. So everytime, I have to reset the rotation and apply the transformation with the absolute angle. -
Why not calculate the delta of the angle and transform from that ?
-
@SGaist It makes my computation little more complicated. However, it seems like the most viable option.
Thanks for the suggestion.