赞
踩
Graphics View Framework
交互式 2D 图形的 Graphics View 框架概述。自 Qt4.2 中引入了 Graphics View,以取代其前身 QCanvas。Graphics View 提供了一个用于管理和交互大量的可定制的 2D 图形项与用于可视化这些项的 View 小部件的 surface(曲面),并提供缩放(zooming)和旋转(rotation)功能支持。
该框架包括事件传播体系结构(an event propagation architecture),该体系结构允许对场景中的项目进行精确的双精度交互功能。图元可以被如下操作处理:按键事件,鼠标按下,移动,释放和双击事件,它们还可以跟踪鼠标的移动。
Graphics View 使用 BSP(Binary Space Partitioning,二进制空间分区)树提供了非常快速的图元发现功能,因此,它可以实时可视化大型场景(甚至可以包含数百万个图元)。下面列出 Graphics View Framework 的常用模块:
Shape
Graphics
View
Graphics
QtWidgets.QGraphicsItem
QtWidgets.QAbstractGraphicsShapeItem
QtWidgets.QGraphicsEllipseItem
QtWidgets.QGraphicsPathItem
QtWidgets.QGraphicsPolygonItem
QtWidgets.QGraphicsRectItem
QtWidgets.QGraphicsSimpleTextItem
QtWidgets.QGraphicsWidget
QtCharts.QChart
QtWidgets.QFrame
QtWidgets.QAbstractScrollArea
QtWidgets.QGraphicsView
QtCore.QObject
QtWidgets.QGraphicsScene
QtWidgets.QGraphicsLayoutItem
QtGui.QPaintDevice
QtWidgets.QWidget
QtWidgets.QGraphicsItemGroup
QtWidgets.QGraphicsLineItem
QtWidgets.QGraphicsPixmapItem
QtWidgets.QGraphicsObject
QtWidgets.QGraphicsTextItem
1 The Graphics View Architecture
Graphics View 提供了一种基于项目(item-based)的方法来进行模型-视图编程(model-view programming),非常类似于 InterView 的便利类 QTableView,QTreeView 和 QListView。多个视图可以观察单个场景,并且该场景包含各种几何形状的图元项目。
1.1 The Scene
QtWidgets.QGraphicsScene 提供了 Graphics View 场景。QGraphicsScene 类提供了一个用于管理大量 2D 图形项目的容器(surface)。
场景具有如下功能:
提供用于管理大量图元项目的快速界面
将事件传播到每个图元项目
管理图元项目状态,例如选择和焦点处理
提供未被转换的渲染功能;主要用于印刷
场景用作 QtWidgets.QGraphicsItem 对象的容器。它与 QtWidgets.QGraphicsView 一起用于可视化 2D 曲面上(2D surface)的图形项目,例如线条,矩形,文本,甚至是自定义项目。通过调用 addItem() 将图元项目添加到场景中,然后通过调用许多项目查找功能之一来检索项目。
请注意,QGraphicsScene 没有自己的视觉外观。它只管理图元项目。您需要创建一个 QGraphicsView 小部件以可视化场景。
要将项目添加到场景,首先需要构造一个 QGraphicsScene 对象。然后,您有两个选择:通过调用 addItem() 添加现有的 QGraphicsItem 对象,或者可以调用下列便捷函数之一 addEllipse(),addLine(),addPath(),addPixmap(),addPolygon(),addRect() 或 addText(),它们都返回一个指向新添加项目的指针。使用这些函数添加的图元的维度是相对于图元(item)的坐标系的,并且图元的位置在场景中被初始化为 (0,0)
。
您可以使用 QGraphicsView 可视化场景。当场景发生变化时(例如,当某项移动或变换时),QGraphicsScene 发出 change() 信号。要删除项目,请调用 removeItem()。
QGraphicsScene 使用索引算法来有效地管理项目的位置。默认情况下,使用 BSP(二进制空间分区)树;一种适用于大型场景的算法,其中大多数图元保持静止(即不要四处移动)。您可以选择通过调用 setItemIndexMethod() 禁用此索引。
通过调用 setSceneRect() 设置场景的边界矩形。可以将图元项目放置在场景中的任何位置,默认情况下,场景的大小不受限制。场景 rect 仅用于内部簿记,维护场景的图元项目索引。如果未设置场景矩形,则 QGraphicsScene 将使用 itemsBoundingRect() 返回的所有项目的边界区域作为场景矩形。但是,itemsBoundingRect() 是一个相对耗时的函数,因为它通过收集场景中每个项目的位置信息进行操作。因此,在大型场景上操作时,应始终设置场景 rect。
QGraphicsScene 的最大优势之一就是能够有效确定图元的位置。即使场景中有数百万个项目,items() 函数也可以在几毫秒内确定项目的位置。items() 有多个重载:一个重载在某个位置查找项目,一个重载在多边形或矩形内部或与之相交,等等。返回的项目列表按堆叠顺序排序,最高的项目是列表中的第一项目。为了方便起见,还有一个 itemAt() 函数可在给定位置返回最上面的项目。
QGraphicsScene 还管理某些图元项目状态,例如图元项目选择和焦点。要选择项目,请调用 setSelectionArea()(传递任意形状来选择场景中的项目),并要清除当前选择,请调用clearSelection()。调用 selec
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。