Qt Graphics View Framework 图形视图框架

QT2D绘图我们使用QPainter实现少量绘图是很理想的,但是如果是要绘制大量的2D图形并且需要能够控制管理时就会显得力不从心。

好在QT视图体系提供了QGraphics View Framework的框架。使用这个框架可以将各图形项进行单独或分组的控制管理。

 

它包含三个大类:QGraphicsItem 项类(或者叫做图元类),QGraphicsScene 场景类,和 QGraphicsView 视图类。QGraphicsItem是在场景中的图形项,QGraphicsScene相当于容器包含和管理QGraphicsItem。项类通过QGraphicsScene::addItem(),(QGraphicsScene::add*())被加入到SceneQGraphicsView是个视图窗体部件。我们可以将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, -102020));

   // a white semi-transparent foreground

   scene.setBackgroundBrush(Qt::yellow);

   // a grid foreground

   scene.setForegroundBrush(QBrush(Qt::lightGrayQt::CrossPattern));

   return a.exec();

}


官方Example中有许多例子相关的例子,可以查看学习。


你可能感兴趣的:(QT)