随笔 - 4  文章 - 0  评论 - 0  阅读 - 5698

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 函数设置图元在场景中的位置(基于场景坐标系),posscenePos 函数返回图元位置(基于场景坐标系)。

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);

 

posted on   编译器有自己的想法  阅读(3760)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示