Graphics View框架中三个重要的类:QGraphicsScene, QGraphicsView, QGraphicsItem。
Scene提供了图形视图场景,它是整个框架的基础,负责以下四个事情:
1.为了管理大量元素item,它提供了一个快速的接口
2.传播事件给每一个元素item
3.管理元素item状态,例如选择和焦点处理
4.提供原生的渲染功能,主要用于绘图。
Scene场景充当一个QGraphicsItem对象,可以使用addItem()函数将元素item添加到场景中,场景负责管理添加到自身的元素,比如传播事件等。可以把Scene想象成一个管理器,统一管理它旗下的元素item。
View视图主要作为场景中的视图组件,它将场景中的内容展现在我们的眼前。同时它还负责接收来自键盘和鼠标的输入事件,然后将事件转换成场景事件然后传播给Scene。
Item元素是场景中基础组件,它被添加到场景中,然后被View视图显示出来。描述元素主要利用一些属性,
shape()函数返回元素的轮廓图,如果我们定义了一个类继承QGraphicsItem,那么我们就需要实现shape()函数返回这个类表示的元素的轮廓图(为了画出一个东西,首先当然要知道它的轮廓图,或者说形状是什么样子嘛,不然谁知道怎么画。。。)。shape()函数返回的是QPainterPath类型,用于表示外围轮廓。
boundingRect()函数则返回包围元素的最小矩形,用于Scene判断哪个区域发生了改变。
此外,QGraphicsItem类自带碰撞检测,这就为元素之间的相互作用提供了很大的方便。因为我们每创建一个元素,就需要使用addItem函数将其添加到Scene中,所以就可以使用QGraphicsItem::collidesWith()函数来返回所有在Scene中与该元素发生碰撞的元素。
除此之外,就是三者的坐标系统,一旦决定使用Graphics View框架,就注定要与三者的坐标变换奋斗。