Qt图像移动/旋转

时间:2013-05-16 09:55:08

标签: qt

我只是想通过小部件的轴移动图像并围绕小部件的中心旋转(就像任何数字绘画软件中的画布一样),但它绕着它的左上角旋转点......

QPainter p(this);
QTransform trans; 

trans.translate(width()/2, -height()/2);
trans.rotate(angle); 

QTransform inverse = trans.inverted();
inverse.translate(-canvas.width()/2, -canvas.height()/2); 

p.setTransform(trans);
p.drawImage(inverse.map(canvasPos), canvas);

如何让它正确旋转?

2 个答案:

答案 0 :(得分:4)

您可以在单个转换中将小组中心的图像初始重新定位,旋转和最终结果居中组合在一起。

QTransform上的操作按相反顺序完成,因为应用于QTransform的最新操作将是应用于图像的第一个:

// QImage canvas;
QPainter p(this);
QTransform trans; 

// Move to the center of the widget
trans.translate(width()/2, height()/2);

// Do the rotation
trans.rotate(angle); 

// Move to the center of the image
trans.translate(-canvas.width()/2, -canvas.height()/2); 

p.setTransform(trans);
// Draw the image at (0,0), because everything is already handled by the transformation
p.drawImage(QPoint(0,0), canvas);

答案 1 :(得分:2)

对象围绕其左上角而不是其中心旋转的常见原因是因为它的尺寸在左上角定义为0,0,而不是在对象的中心。

你没有显示'canvas'对象是什么,所以假设它类似于QGraphicsRectItem,你需要声明它的左上角,宽度,高度为-x / 2,-y / 2,width,高度,以确保对象的中心点为0,0。然后,当您旋转对象时,它将围绕其中心旋转。

此外,您应该尝试将旋转和平移逻辑与绘画功能分开,以获得最佳性能。