Graphics View基于笛卡尔坐标系。item在场景中的位置与几何形状通过x,y坐标表示。当使用未经变形的视图来观察场景时,场景中的一个单位等于屏幕上的一个像素。在Graphics View中有三个有效的坐标系统:Item坐标系,场景坐标系,视图坐标系。为了简化你的实现,Graphics View提供了方便的函数,允许三个坐标系之间相互映射。
当渲染时,Graphics View的场景坐标对应于QPainter的逻辑坐标,视图坐标与设备坐标相同。

Item坐标
Items位于它们自己的坐标系中。它的坐标都以点(0,0)为中心点,这也是所有变换的中心点。在item坐标系中的几何图元,经常被称为item点,item线,item矩形。当创建一个定制的item,item坐标是所需要考虑的。QGraphicsScene与QGraphicsView可以为你执行所有转换,这使得实现定制的item变得容易。举例来说,假如你收到鼠标按或是拖进入事件,事件的位置以item坐标的形式给出。QGraphicsItem::contain()虚函数,当某个点的位置在你的item范围内时,返回true,否则返回false。这个点参数使用item坐标,相似地,item的包围矩形与形状也使用item坐标。
Item位置指的是item的中心点在它父亲的坐标系中的坐标。以这种思想来看,场景指的就是那些祖先最少的item的“父亲”。最上级的Item位置就是在场景中的位置。
子坐标与父坐标之间是相关的,假如孩子未经变换,子坐标与父坐标之间的差值等于在父坐标系下,父item与子item之间的距离。例如,假如一个未经变换的子item位置与其父item的中心重合,那么这两个item的坐标系统完全相同。如果孩子的位置是(10,0),那么孩子坐标系中的(0,10)点,对应于父坐标系中的(10,10)点。
因为item的位置与变换是相对于父item的,子item的坐标不会被父亲的变换影响,尽管父item的变换隐含地对子item做了变换。在上面的例子中,即使父item旋转,缩放,子item的(0,10)点依然对应于父item的(10,10)点。然而,相对于场景来讲,子item会遵循父item的变换。假如父item被缩放(2X,2X),子item的位置在场景中的坐标是(20,0),它的(10,0)点则与场景中的(40,0)对应 。除了QGraphicsItem::pos(),QGraphicsItem的函数以Item坐标工作,如一个item's包围矩形总是以item坐标的形式给出。

场景坐标
场景坐标系统描述了每个最顶级item的位置,也是从视图向场景投递场景事件的基础。场景中的每个item有场景位置与包围矩形(QGraphicsItem::scenePos(),QGraphicsItem::sceneBoundingRect()), 另外,它有自己本地item位置与包围矩形。场景位置描述了item在场景坐标下的位置,它的场景包围矩形则用于QGraphicsScene决定场景中哪块区域发生了变化。场景中的变化通过QGraphicsScene::changed()信号来通知,它的参数是场景矩形列表。

视图坐标
视图坐标是widget的坐标,视图坐标中每个单位对应一个像素。这种坐标的特殊之处在于它是相对于widget或是视口的,不会被所观察的场景所影响。QGraphicsView的视口的左上角总是(0,0),右下角总是(视口宽,视口高)。所有的鼠标事件与拖拽事件,最初以视图坐标表示,就应该把这些坐标映射到场景坐标以便与item交互。

坐标映射
经常,处理场景中item时,在场景与item之间,item与item之间,视图与场景之间进行坐标映射,形状映射是非常有用的。举例来讲,当你在QGraphicsView的视口中点击鼠标时,你应该通过调用QGraphicsView::mapToScence()与QGraphicsScene::itemAt()来获知光标下是场景中的哪个item。假如你想获知一个item位于视口中的什么位置,你应该先在item上调用QGraphicsItem::mapToScene(),然后调用QGraphicsView::mapFromScene()。最后,假如你想在一个视图椭圆中有哪些items,你应该把QPainterPath传递到mapToScene(),然后再把映射后的路径传递到QGraphicsScene::items()。
你可以调用QGraphicsItem::mapToScene()与QGraphicsItem::mapFromScene()在item与场景之间进行坐标与形状的映射。也可以在item与其父item之间通过QGraphicsItem::mapToParent()与QGraphicsItem::mapFromItem()进行映射。所有映射函数可以包括点,矩形,多边形,路径。视图与场景之间的映射也与此类似。对于从视图与item之间的映射,你应该首先映射到场景,然后再从场景向item进行映射。

转载于:https://blog.51cto.com/seanyxie/1375953

Graphics View 坐标系统相关推荐

  1. Graphics View框架

    转自:http://hi.baidu.com/liganggang/item/5c55033eb72bc5f7df222112 Graphics View框架 Qt4.2开始引入了Graphics V ...

  2. QT的Graphics View柜架

    Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放. 这个柜架也 ...

  3. QT Graphics View

    1.概述 采用QPainter绘图时需要在绘图设备paintEvent()事件里编写绘图的程序,实现整个绘图过程,这种方法如同使用windows的画图软件在绘图,绘制的是位图,这种方法适合于绘制复杂性 ...

  4. QT学习:图形视图Graphics View

    一.Graphics View框架结构的主要特点 (1)在Graphics View框架结构中,系统可以利用Qt绘图系统的反锯齿.OpenGL工具来改善绘图性能. (2) Graphics View支 ...

  5. QT 中的 Graphics View 系统

    这个框架是一个相对成熟的渲染引擎的上层框架,通常也可以会叫做 Scene - View. 在QT中,GraphicsView是一个与QWdiget系列一点点不一样的系统.这个系统主要由下面几个框架类构 ...

  6. PyQt Graphics View 一个hello world例子

    2019独角兽企业重金招聘Python工程师标准>>> PyQt Graphics View 学习资源 http://www.devbean.net/2012/12/qt-study ...

  7. qt制作一个画板_Qt 一个简易画板实现(Graphics View).pdf

    Qt ⼀个简易画板的实现(Graphics View) Qt 学习之路(32): ⼀个简易画板的实现(Graphics View) 这⼀次将介绍如何使⽤ Graphics View 来实现前⾯所说的画 ...

  8. Qt之基于Graphics View实现Mesh网络拓扑图

    Mesh是一种多节点.无中心.自组织的无线多跳通信网络,也就是网状结构网络.网络中所有的节点都互相连接,每个节点拥有多条连接通道,所有的节点之间形成一个整体的网络. 一.效果 Mesh网络拓扑形态并不 ...

  9. qt制作一个画板_Qt学习之路(32): 一个简易画板的实现(Graphics View)-阿里云开发者社区...

    这一次将介绍如何使用Graphics View来实现前面所说的画板.前面说了很多有关Graphics View的好话,但是没有具体的实例很难说究竟好在哪里.现在我们就把前面的内容使用Graphics ...

最新文章

  1. JDK, JRE 和JVM的区别
  2. N76E003介绍与开发资料获取
  3. SAP CRM Fiori 应用 My Opportunity应用点击Edit后出现time out的错误分析
  4. python 多进程 调用模块内函数_python子进程模块subprocess详解与应用实例 之一
  5. 知乎上已获千赞,持续更新中
  6. Redis 基础——五大类型与数据结构
  7. OpenCV--solvePnp
  8. ILSpy-替代.Net Reflector的工具
  9. Xposed从入门到弃坑:0x03、XposedHelpers类解析
  10. 宿迁市烟草专卖局(公司)系统信息系统运行维护管理办法(试行)
  11. Microsoft Office Interactive Developer Map
  12. 《Python语言程序设计》——2.11 类型转换和四舍五入
  13. tinyxml库使用实例
  14. pcb变压器厂家_大邑县活动板房回收整体回收厂家24小时回收报价-发亿科技
  15. python爬虫qq音乐_Python爬虫实战:采集全部QQ音乐歌曲
  16. 如何实现实时监测配电室环境数据
  17. 马化腾是该全面反思腾讯战略了:吃老本不能让腾讯变得伟大!
  18. 《GPU编程与CG语言之阳春白雪下里巴人》阅读笔记 第五章+第六章
  19. msfvenom生成木马攻击-Windows10实现自己黑自己
  20. 从 BeReal 爆火背后,探秘图片社交新范式

热门文章

  1. python语句first、*middles_Python语句print('%d%%%d'%(3/2, 3%2))的运行结果是( 1 )。_学小易找答案...
  2. python通过pip安装包,提示 pip 不是内部或外部命令
  3. 学生成绩管理系统python课程设计,简易学生成绩管理系统Python
  4. 计算机系统的层次结构是缺一不可的吗,第1章 计算机组成与结构绪论.ppt
  5. faster rcnn源码解读(六)之minibatch
  6. Nginx(二)------nginx.conf 配置文件
  7. Spring AOP详细介绍
  8. 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
  9. MVC框架浅析(基于PHP)
  10. 利用RANSAC算法筛选SIFT特征匹配