第八章 基于项的图形视图

来源:互联网 发布:telnet测试端口问题 编辑:程序博客网 时间:2024/06/06 13:15

    对于用户自定义的窗口部件和绘制一个或者几个项来说,使用QPainter是理想的。在绘图中,如果需要处理从几个到几万个项时,而且要求用户能够单击拖动选取想,Qt的视图类提供了这一解决方案。、

    Qt的视图体系包括一个由QGraphicsScene充当的场景和一些由QGraphicsItem的子类充当的场景中的项。场景以及它的项就能在视图中显示出来了,用户就能看到了,它由QGraphicsView类充当。同一场景可以在多个视图中显示--这样便于部分显示一个较大的场景,或者以不同的变换来显示场景。

如图:


Qt已经提供了很多的QGraphicsItem的项以供使用,当然也可以继承来创建自己的项:


    QGraphicsScene是一个图形项的集合。一个场景有三层:背景层、项层、前景层。前景背景层通常是由QBrush指定,但也可能需要重新实现drawBackground和drawForeground,以便可以实现完全的控制。

    场景可以告诉我们哪些项是重叠的,哪些是被选取的,以及哪些实在一个特定的点处,或者在一个特定的区域内。场景中的项或者是最高层的项,或者是子项。任何应用于项的变换都会自动的应用于子对象。

    视图体系提供了两种分组项的方法。一种方法是简单地使用一个项成为另一个项的子项。要不就是使用QGraphicsItemGroup。把一个项天际到组中不会引起任何变换,这些组可以很方便的处理大量的项,就行单独的项一样。

    QGraphicsView是一个窗口部件,这个窗口部件可以显示场景,在需要时候提供滚动条,以及硬性场景绘制方式的变换能力。这有利于支持缩放和旋转,帮助浏览场景。默认情况view是使用Qt内置的二维图形引擎绘图,但是可以修改的,在其创建完后调用setViewport改为使用OpenGL窗口部件。


    这个体系使用三种不同的坐标系统--视口坐标、场景坐标和项坐标--而且还包含从一个坐标系统映射到另一个坐标系统的函数。视口坐标就是view的坐标,场景坐标是逻辑坐标,用来布置场景中的项。视图类用起来很简单,而且具有很强的功能。可以参考书本上的两个例子。

    这里只是简要介绍一下,这个部分还是非常重要的,以后再补充扩展,因为GraphicsXXX在Qt的图形应用中非常重要,也非常常见。