# 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,

1. setRect( originPt, width, height )
2. 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 ?

• @SGaist

``````                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.