Добрый день,
Я не изучал еще 2d отрисовку и не могу подсказать правильный код.
Но происходит следующее:
В первом варианте, если закомментировать setTransformOriginPoint определяющую точку вокруг которой поворачивается изображение, то скачков не будет.
Потому что - верхняя левая точка от которой рисуется квадрат всегда будет на своем месте. И при растяжение и при повороте, точка откуда считается квадрат неподвижна.
В вашем варианте, когда вы поворачиваете квадрат с setTransformOriginPoint, точка от которой рисуется квадрат все еще остается на прежнем месте, а левый-верхний угол квадрата отворачивается от нее. При этом, когда наклон квадрата 0 (или 360), его верхний левый угол должен соответствовать точке 0, 0. При изменение размера + повороте, квадрат смещается, чтобы соответствовать этой точке.
Одним из возможных решениев будет - избавиться от setTransformOriginPoint и рисовать квадрат в минус, чтобы середина отрисовки была в середине квадрата:
C++ (Qt)
QRectF Cropper::boundingRect() const
{
return QRectF(0 - width/2, 0 - height/2, width, height);
}