QT之图形视图框架概述——Graphics View Framework
1. 概述
Graphics View Framework
是子Qt 4.2
引入的,用来取代之前版本中的QCanvas
。Graphics View Framework
提拱了用于大量2D图形项的管理和交互的能力。当然Graphics View Framework
也支持与OpenGL
相结合进行3D模型渲染。该框架还包含了事件传播体系结构。
Graphics View Framework
采用BSP(Binary Space Partitioning,二进制空间分区)
树作为存储结构,因此提供了非常快速的图元发现功能,甚至可以包含数百万个图元。
2. 核心类
在Graphics View Framework
框架中存在三个非常重要的类,对其功能简述如下:
QGraphicsView
- 提供了用于显示
QGraphicsScene
内容的widget
- 将事件传递给
QGraphicsScene
- 提供了用于显示
QGraphicsScene
- 用于管理图元项目
- 将事件传递给每个图元
QGraphicsItem
- 是图形项的基类
- 碰撞检测
(Collision detection)
- 通过
parent-child
关系以及QGraphicsItemGroup
进行分组 - 各种事件处理
这三个类的关系:
界面显示关系:
3. 事件传递
4. Graphics View 坐标系统
- 视图坐标
与设备坐标相同,是物理坐标,一般以左上角为圆点,单位是像素
视图的坐标只与widget或者视口有关,而与场景无关,所有的鼠标事件、拖放事件的坐标首先是由视图坐标定义的,然后用户需要将这些坐标映射成场景坐标,以便程序中交互 - 场景坐标
等价于QPainter的逻辑坐标,一般以场景的中心为原点,单位是像素
场景是所有图形项的基础坐标,描述了每个顶层图形项的位置 - 图形项坐标
局部逻辑坐标,一般以图件的中心为原点
每个图形项在场景里都有一个位置坐标,是由QGraphicsItem::scenePos
给出的
示例图如下: