首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt图像移动/旋转

Qt图像移动/旋转
EN

Stack Overflow用户
提问于 2013-05-16 17:55:08
回答 2查看 11.7K关注 0票数 3

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

代码语言:javascript
运行
复制
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);

如何让它正确旋转?

EN

回答 2

Stack Overflow用户

发布于 2013-05-16 21:05:52

您可以将图像的初始重新居中、旋转和最终结果在小部件中心的居中组合在一个转换中。

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

代码语言:javascript
运行
复制
// 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);
票数 4
EN

Stack Overflow用户

发布于 2013-05-16 20:47:58

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

你还没有展示“画布”对象是什么,所以假设它是一个类似于QGraphicsRectItem的东西,你需要声明它的左上角,宽度,高度为-x/2,-y/2,宽度,高度,以确保对象的中心点在0,0。然后,当你旋转物体时,它将围绕它的中心旋转。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16584285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档