QT的2D绘图我们使用QPainter实现少量绘图是很理想的,但是如果是要绘制大量的2D图形并且需要能够控制管理时就会显得力不从心。
好在QT视图体系提供了QGraphics View Framework的框架。使用这个框架可以将各图形项进行单独或分组的控制管理。
它包含三个大类:QGraphicsItem 项类(或者叫做图元类),QGraphicsScene 场景类,和 QGraphicsView 视图类。QGraphicsItem是在场景中的图形项,QGraphicsScene相当于容器包含和管理QGraphicsItem。项类通过QGraphicsScene::addItem(),(QGraphicsScene::add*())被加入到Scene。QGraphicsView是个视图窗体部件。我们可以将scene绑定到view。并且一个scene可以被绑定到多个view中。
QGraphicsScene scene;
myPopulateScene(&scene);
QGraphicsView view(&scene);
view.show();
QGraphicsScene是一个图形项的集合,它包括三层:背景层background layer, 项层item layer 和前景层foreground layer。可以通过重新实现drawBackground() drawForeground() 来控制背景层和前景层。
这个体系使用三种不同的坐标系统——项坐标,场景坐标和视口坐标(Item coordinates, scene coordinates, and view coordinates.)。
下面看一个简单的例子具体如何使用:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
// add a rectangle item
scene.addRect(QRectF(-10, -10, 20, 20));
// a white semi-transparent foreground
scene.setBackgroundBrush(Qt::yellow);
// a grid foreground
scene.setForegroundBrush(QBrush(Qt::lightGray, Qt::CrossPattern));
return a.exec();
}
官方Example中有许多例子相关的例子,可以查看学习。