我只想通过小部件的轴向移动图像,并围绕小部件的中心旋转(就像任何数字绘画软件中的画布一样),但它是围绕其左侧顶点旋转的……
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);
如何让它正确旋转?
发布于 2013-05-16 21:05:52
您可以将图像的初始重新居中、旋转和最终结果在小部件中心的居中组合在一个转换中。
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);
发布于 2013-05-16 20:47:58
通常对象围绕其左上点旋转,而不是围绕其中心旋转,是因为它的尺寸定义为左上角为0,0,而不是在对象的中心。
你还没有展示“画布”对象是什么,所以假设它是一个类似于QGraphicsRectItem的东西,你需要声明它的左上角,宽度,高度为-x/2,-y/2,宽度,高度,以确保对象的中心点在0,0。然后,当你旋转物体时,它将围绕它的中心旋转。
此外,您应该尝试将旋转和平移逻辑与绘制功能分开,以获得最佳性能。
https://stackoverflow.com/questions/16584285
复制相似问题