文章目录

  • 坐标系统
    • 图形项坐标
    • 场景坐标
    • 视图坐标
    • 坐标映射
  • 事件处理与传播
  • QGraphicsScene 管理 QGraphicsItem(单击/选择/移动/缩放/删除)
  • 参考

坐标系统

图形项坐标

图元生活在自己的局部坐标系。它们的坐标通常围绕它们的中心点(0, 0),并且这也是所有转换的中心。图元坐标系下的几何元素通常指点、线或矩形。

创建自定义图元时,只需考虑图元坐标即可。QGraphicsScene和QGraphicsView会为你实现所有相关的转换,这样一来,实现自定义图元就容易多了。例如:当你接收到鼠标按下或拖拽事件时,事件位置将由图元坐标给出。如果某一点(传递一个图元坐标作为参数)在图元中,那么GraphicsItem::contains()虚函数将会返回true;否则,返回false。同样的,项绑定的矩形或形状区域也是项坐标系统的。同样的,图元的矩形边界和形状都是基于图元坐标的。

图元的位置是图元的中心点在其父坐标系下的坐标,有时也被称为父坐标。场景从这个意义上说是所有无父图元的“parent”,顶层图元的位置在场景坐标中。

子坐标是相对于父坐标而言的。如果子坐标没有转换,那么子坐标和父坐标的差异就和图元在父坐标中的距离一样。例如:一个未经转换的子图元正好位于父图元的中心点,那么,这两个图元的坐标系是完全一样的。如果子图元的位置是(10, 0),那么子图元的(0, 10)点就对应父图元的(10, 10)点位置。

由于图元的位置和转换是相对于父图元来说的,因此,虽然父图元的转换隐式地转换了子图元,但是子图元的坐标不会因父图元的转换而受到影响。在上述示例中,即使父图元经过了旋转和缩放,子图元的(0, 10)点始终对应父图元的(10, 10)点。不过相对于场景来说,子图元将随着父图元进行转换和偏移 。如果父图元缩放了(2x, 2x),那么子图元在场景中的坐标是(20, 0),并且其(10, 0)点将会对应于场景中的(40, 0)点。

不管图元或父图元进行了怎样的转换,QGraphicsItem的函数操作都在图元坐标内。例如:一个图元的矩形边界(QGraphicsItem::boundingRect())总是在图元坐标下给出。但是QGraphicsItem::pos()是例外之一,该函数表示其在父图元中的位置 。

场景坐标

场景为所有的图元提供了基础的坐标系。场景坐标系描述了每一个顶层图元的位置,同时构成了从视图传递到场景的所有场景事件的基础。场景中的每个图元都有一个场景位置和矩形边界(QGraphicsItem::scenePos()、QGraphicsItem::sceneBoundingRect());另外,也有其自身的位置和矩形边界。场景位置描述了图元在场景坐标下内的位置,场景矩形边界则提供给QGraphicsScene来决定场景中的哪块区域已经被改变了。场景中的变化通过QGraphicsScene::changed()信号发出,参数是场景矩形列表。

视图坐标

视图坐标是部件的坐标,视图坐标中的每个单位对应一个像素。对于该坐标系来说比较特殊的一点是:它相对于部件或视口,不会受被观察的场景所影响。QGraphicsView的视口左上角总是(0, 0),右下角总是(viewport width, viewport height)。所有的鼠标事件和拖拽事件都以视图坐标接收到的,你需要将这些坐标映射到场景,以便于和图元进行交互。

坐标映射


事件处理与传播

QGraphicsScene 管理 QGraphicsItem(单击/选择/移动/缩放/删除)

学习见链接
如果想让场景使用橡皮筋进行框选,则可以使用:

setDragMode(QGraphicsView::RubberBandDrag);

但是图形项不能设置成:

setFlag(QGraphicsItem::ItemIsFocusable);

而是应该设置成:

setFlag(QGraphicsItem::ItemIsSelectable);

这里提供一份代码:可以使用

使用shift+鼠标左键单选
使用ctrl+鼠标左键多选
使用鼠标的橡皮筋进行多选

参考

https://blog.csdn.net/liang19890820/article/details/51966791

QT学习之图形视图框架相关推荐

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

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

  2. Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元

    啥意思,感觉本人语文学得菜,不好描述. 直接看程序运行截图: 1.隐藏鼠标: 2.图元分组: 3.视图与场景坐标转换 程序源码如下: mygraphicsitem.h #ifndef MYGRAPHI ...

  3. 【Qt】2D绘图之图形视图框架(一)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 场景(Scene) 04. 视图(View) 05. 图形项 06. 附录 01. 概述 在前面讲的基本绘图中,我们可以自 ...

  4. [Qt教程] 第19篇 2D绘图(九)图形视图框架(上)

    [Qt教程] 第19篇 2D绘图(九)图形视图框架(上) 楼主  发表于 2013-5-4 15:26:20 | 查看: 1798| 回复: 26 图形视图框架(上) 版权声明 导语 在前面讲的基本绘 ...

  5. Qt图形视图框架:QGraphicsScene详解

    一.描述 1.场景提供了一个用于管理大量2D图形项的平面.该类充当图形项的容器. 它与视图一起用于可视化2D曲面上的图形图形项. 2.场景没有自己的视觉外观,只负责管理图形项. 3.场景的最大优势之一 ...

  6. 【Qt】Qt再学习(十一):图形视图框架(Graphics View Framework)的一个小demo

    1.简介 使用的主要类:QGraphicsTextItem.QGraphicsScene.QGraphicsView. QGraphicsTextItem继承自QGraphicsObject,而QGr ...

  7. Qt修炼手册6_图形:图形视图框架

    1.前言 主要为了学习可以在GUI上有效显示或管理大量图形对象的API,以及进行显示.扩大.缩小等操作. 2.图形视图框架(Graphics View Framework) 图形视图框架使用BSP树算 ...

  8. [Qt教程] 第20篇 2D绘图(十)图形视图框架(下)

    [Qt教程] 第20篇 2D绘图(十)图形视图框架(下) 楼主  发表于 2013-5-4 15:43:02 | 查看: 861| 回复: 0 图形视图框架(下) 版权声明 该文章原创于Qter开源社 ...

  9. Qt图形视图框架详解-安晓辉-专题视频课程

    Qt图形视图框架详解-12227人已学习 课程介绍         介绍Qt中的Graphics View Framework,涉及View.Scene.Item的关系,如何自定义QGraphicsI ...

最新文章

  1. 水电缴费系统php源码_简易水电费管理系统源程序代码
  2. java mysql 操作类_Java 数据库简单操作类
  3. build.gradle里uploadArchives标签的实现原理
  4. 电子商务网站 数据库产品表设计方案
  5. bzoj 1026: [SCOI2009]windy数
  6. 微信弹出遮罩层引导用户浏览器打开升级版
  7. python开发桌面软件实例-Python开发的第一步:利用Python开发一个桌面小程序
  8. 山东理工ACM[2108]一元二次方程Ⅲ
  9. 垃圾分类小程序,识别和站点查询,答题,用户后台管理集一体的小程序
  10. 房屋装修自装,如何自己做装修设计
  11. 启用新博客域名 www.qiuchengjia.cn
  12. 百问网七天物联网课程学习笔记——单片机时钟
  13. Java如何使用直接内存?
  14. 为期近五个月的英语培训班总结
  15. C++解OJ题--最大子数组和(第一次尝试动态规划,很烧脑)
  16. crpc流程图_传输设备施工作标准.doc
  17. matlab的2维矩阵和3维矩阵维度变换,二维矩阵变换三维矩阵,2D矩阵转换3D矩阵
  18. 一台机器开启多个tomcat7 绿色版
  19. MXNET深度学习框架-09-使用正则化方法解决过拟合问题(以从0开始的线性回归为例)
  20. 论VPN 网络传输的安全性影响

热门文章

  1. Oracle根据日期区间查询Date类型的数据
  2. 2022-2028年中国散热产业深度调研及投资前景预测报告(全卷)
  3. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别
  4. Python2 与 Python3 区别
  5. 【JavaScript总结】JavaScript发展与学习内容
  6. CRF(条件随机场)与Viterbi(维特比)算法原理详解
  7. equals()与hashCode()
  8. Mysql分页order by数据错乱重复
  9. GPU上稀疏矩阵的基本线性代数
  10. PyTorch全连接ReLU网络