Qt 图形视图框架(QGraphicsView, QGraphicsScene, QGraphicsItem)坐标系
1. QGraphicsView架构学习总结(1) - 知乎 (zhihu.com)
2. 如何认识Qt GraphicsView的坐标体系-百度经验 (baidu.com)
3. Qt中QGraphics类坐标映射关系详解 - cthu - 博客园 (cnblogs.com)
【笔记】:
1. 视图(view)、场景(scene)、图元(item)三者的坐标系:
1)视图坐标系与主窗体的逻辑坐标相同,以窗体左上角为原点(0,0),x 向右为正,y 向下为正。
2)场景坐标系以场景中心为原点。
setSceneRect 函数设置了视图中的场景坐标系某点到视图原点的映射,及场景尺寸。
3)图元坐标系以图元中心为原点。
3.1)QGraphicsItem::boundingRect 函数确定以图元原点为中心,图元的绘制范围:
QRectF(-radius - penWidth / 2, -radius - penWidth / 2, diameter + penWidth, diameter + penWidth);
3.2)setPos 函数设置图元在场景中的位置(基于场景坐标系),pos 和 scenePos 函数返回图元位置(基于场景坐标系)。
4)默认情况:
4.1)默认图元原点与场景原点重合。
4.2)当场景(图元)尺寸小于视图尺寸时,默认场景原点(即中心)位于视图中心。
//4.3)当场景(图元)尺寸大于视图尺寸时,默认场景原点(即中心)位于视图中心。
2.1 用法示例1:
假设有一个200*200的图元,
设置视图尺寸:
view->resize(400, 400);
设置场景坐标系某点(0, 0)到视图原点(0, 0)的映射,及场景尺寸:
scene->setSceneRect(0, 0, 400, 400);
设置图元原点位置:
item->setPos(0, 0);
2.2 用法示例2:
假设有一个200*200的图元,
设置视图尺寸:
view->resize(400, 400);
设置场景坐标系某点(-200, -200)到视图原点(0, 0)的映射,及场景尺寸:
scene->setSceneRect(-200, -200, 400, 400);
设置图元原点位置:
item->setPos(0, 0);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通