- 绘图系统基于
QPainter、QPaintDevice和QPaintEngine类。QPainter是用户来进行绘图操作的类QPaintDevice是一个可以使用QPainter进行绘图的抽象的二维界面QPaintEngine给QPainter提供在不同设备上绘图的接口
- 一般的绘图设备包括
QWidget、QPixmap、QImage等,这些绘图设备为QPainter提供一个画布。 - QPainter绘图的主要属性
- 用QPainter在绘图设备上绘图,主要是绘制一些基本的图形元素,包括点、直线、圆形、矩形、曲线、文字等,控制这些绘图元素特性的主要是QPainter的3个属性,分别如下:
- pen属性:是一个QPen对象,用于控制线条的颜色、宽度、线型等。
- brush属性:是一个QBrush对象,用于设置一个区域的填充特性,可以设置填充颜色、填充方式、渐变特性等,还 可以采用图片做材质填充。
- font属性:是一个QFont对象,用于绘制文字时,设置文字的字体样式、大小等属性。
- 使用这3个属性基本就控制了绘图的基本特点,当然还有一些其他的功能结合使用,比如叠加模型、旋转和缩放等功能。
- 用QPainter在绘图设备上绘图,主要是绘制一些基本的图形元素,包括点、直线、圆形、矩形、曲线、文字等,控制这些绘图元素特性的主要是QPainter的3个属性,分别如下:
- QPen
- QPen用于绘图时对线条进行设置,主要包括线宽、颜色、线型等。
- QBrush
- QBrush定义了QPainter绘图时的填充特性,包括填充颜色、填充样式、材质填充时的材质图片等。
- 渐变填充
- 使用渐变填充需要用渐变类的对象作为Painter的brush,有3个实现渐变填充的类。
- QLinearGradient:线性渐变。
- QRadialGradient:有简单辐射渐变和扩展辐射渐变两种方式。
- QConicalGradient:圆锥形渐变。
- 使用渐变填充需要用渐变类的对象作为Painter的brush,有3个实现渐变填充的类。
- QPainter提供了一些坐标变换的功能,通过平移、旋转等坐标变换,得到一个逻辑坐标系统,使用逻辑坐标系统在某些时候绘图更方便。
- Graphics View架构主要由3个部分组成,即场景、视图和图形项。
- 场景
- QGraphicsScene类提供绘图场景(Scene)。场景是不可见的,是一个抽象的管理图形项的容器,可以向场景添加图形项,获取场景中的某个图形等。
- 场景主要具有如下一些功能:
- 提供管理大量图形项的快速接口;
- 将事件传播给每个图形项;
- 管理每个图形项的状态,例如选择状态、焦点状态等;
- 管理未经变换的渲染功能,主要用于打印。
- 视图
- QGraphicsView提供绘图的视图(View)组件,用于显示场景中的内容。可以为一个场景设置几个视图,用于对同一个数据集提供不同的视口。
- 视图接收键盘和鼠标输入并转换为场景事件,并进行坐标转换后传送给可是场景。
- 图形项
- 图形项(Graphics Item)就是一些基本的图形元件,图形项的基类是QGraphicsItem。
- QGraphicsItem支持如下的一些操作:
- 支持鼠标事件响应,包括鼠标按下、移动、释放、双击,还包括鼠标停留、滚轮、快捷菜单等事件。
- 支持键盘输入,按键事件;
- 支持拖放操作;
- 支持组合,可以是父子项关系组合,也可以是通过QGraphicsItemGroup类进行组合。
- Graphics View的坐标系统
- Graphics View系统有3个有效的坐标系:
- 图形项坐标:图形项使用自己的局部坐标(Item Coordinates),通常以其中心为(0,0),也是各种坐标变换的中心。
- 视图坐标:视图坐标(View Coordinates)就是窗口界面(widget)的物理坐标,单位是像素。
- 场景坐标:场景是所有图形项的基础坐标,场景坐标(Scene Coordinates)描述了每个顶层图形项的位置。
- 坐标映射
- 在
QGraphicsView的视口上单击鼠标时,通过函数QGraphicsView::mapToScene()可以将视图坐标映射为场景坐标,然后用QGraphicsScene:itemAt函数可以获取场景中鼠标光标处的图形项。
- 在
- Graphics View系统有3个有效的坐标系:
- Graphics View相关的类
- 视图类QGraphicsScene
- QGraphicsView的视口坐标等于显示设备的物理坐标,但是也可以对QGraphicsView的坐标进行平移、旋转、缩放等变换。
- 场景类 QGraphicsScene
- QGraphicsScene是用于管理图形项的场景,是图形项的容器,有添加、删除图形项的函数,管理图形项的各种函数。
- 图形项类 QGraphicsItem
- QGraphicsItem是所有图形项的基类,用户也可以从QGraphicsItem继承定义自己的图形项。
- 视图类QGraphicsScene