Graphics View 框架
一直一来,对Graphics View框架都没进行系统的学习和总结,今天就来梳理一下。
Graphics View框架提供基于图元的模型-视图编程,它包括三个主要的类:QGraphicsScene, QGraphicsView,
QGraphicsItem,分别是场景、视图和图元。一个场景可以通过多个视图表现,一个场景可以包括多个几何图形。
1、场景:
场景类完成如下功能:
* 提供管理大量图元的快速接口
* 传播事件给场景中的每个图元
* 管理图元状态,如选择和焦点处理
* 提供无变换的绘制功能,如打印
场景是QGraphicsItem对象的容器,QGraphicsScene::addItem().图元可以通过多个函数进行检索:QGraphicsScene::items()
和一些重载函数可以返回和点、矩形、多边形或向量路径相交的所有图元,QGraphicsScene::itemAt()返回指定点的最顶层图元。
QGraphicsScene的事件传播体系结构将场景事件发送给图元,同时也管理图元之间的事件传播。如果场景接收到了在某一点的鼠标单击
事件,场景将会把事件传给在这一点的最顶层图元。QGraphicsScene负责管理一些图元的状态,如图元选择和焦点。通过
QGraphicsScene::setSelectionArea()选择图元,选择区域可以是任意形状,使用QPainterPath表示;得到当前选择的图元列表:
QGraphicsScene::selectedItems().QGraphicsScene::setFocusItem()或QGraphicsScene::setFocus()来设置图元的焦点;
获得当前具有焦点的图元:QGraphicsScene::focusItem();
使用QGraphicsScene::render()在特定的绘图设备上绘制场景。
2、视图:
QGraphicsView是视图窗口控件, 它使场景的内容可视化。可以连接几个视图到一个场景,也可以为相同的数据集提供几种不同的视口,
QGraphicsView是可滚动的窗口部件,如果需要使用OpenGL,使用QGrphicsView::setViewPort()将视口设置为QGLWidget。