Graphics View Framework谷歌翻译为图形视图框架。是Qt提供的用于管理2D图形的一个框架,这个框架的功能很强大,个人感觉这个框架是Qt最引以为傲的一个框架。在很多地方都能看到它的身影。

    我们知道QPainter也可以绘制图形,那么为什么还要写这么一个框架呢?我觉得图形视图框架至少包含两个关键字,一个是大量另一个是交互。它可以实现大量图元的绘制,而且还可以与用户进行交互,这就让图形复活了。当然这个框架的最底层绘制肯定也是QPainter,只不过人家水平高帮我们封装好了。你要是觉得不够好用也可以自己去封装一个框架,可以叫图形视图框架Plus。

    说了一堆废话接着要进入正题,既然是框架那么必然包含几个组成部分。图形视图框架由三部分组成:视图(QGrphicsView)、场景(QGraphicsScene)和图元(QGraphicsItem)。

    视图的工作很明显就是用来显示的,图元表示图形中的一个元素,QGraphicsItem没有基类所以图元类保存的只是图元的数据。场景则是用来管理图元数据的,QGraphicsScene的基类是QObject,由此可见三个组成部分中只有视图是有形的,场景和图元只是用来描述图形的。视图、场景和图元三要素缺一不可,没有视图什么也看不了,没有场景视图也没办法渲染图元,没有图元那就是一张白纸。

    图形视图框架的最基本使用很简单。

    1.创建视图对象。

    2.创建场景对象,将场景对象设置到视图中。

    3.创建图元对象,将图元对象添加到场景中。

    示例代码如下:

blob.png

    视图通过setScene函数设置场景,场景通过addItem添加图元,这样框架就形成了。由于QGraphicsItem是一个抽象类,我们例子使用了Qt提供的矩形图元类。最终绘制效果如下图:

 blob.png