Skip to content

Latest commit

 

History

History
57 lines (57 loc) · 4.47 KB

File metadata and controls

57 lines (57 loc) · 4.47 KB

第8章 绘图

QPainter基本绘图

  • 绘图系统基于QPainterQPaintDeviceQPaintEngine类。
    • QPainter是用户来进行绘图操作的类
    • QPaintDevice是一个可以使用QPainter进行绘图的抽象的二维界面
    • QPaintEngineQPainter提供在不同设备上绘图的接口
  • 一般的绘图设备包括QWidgetQPixmapQImage等,这些绘图设备为QPainter提供一个画布。
  • QPainter绘图的主要属性
    • 用QPainter在绘图设备上绘图,主要是绘制一些基本的图形元素,包括点、直线、圆形、矩形、曲线、文字等,控制这些绘图元素特性的主要是QPainter的3个属性,分别如下:
      • pen属性:是一个QPen对象,用于控制线条的颜色、宽度、线型等。
      • brush属性:是一个QBrush对象,用于设置一个区域的填充特性,可以设置填充颜色、填充方式、渐变特性等,还 可以采用图片做材质填充。
      • font属性:是一个QFont对象,用于绘制文字时,设置文字的字体样式、大小等属性。
    • 使用这3个属性基本就控制了绘图的基本特点,当然还有一些其他的功能结合使用,比如叠加模型、旋转和缩放等功能。
  • QPen
    • QPen用于绘图时对线条进行设置,主要包括线宽、颜色、线型等。
  • QBrush
    • QBrush定义了QPainter绘图时的填充特性,包括填充颜色、填充样式、材质填充时的材质图片等。
  • 渐变填充
    • 使用渐变填充需要用渐变类的对象作为Painter的brush,有3个实现渐变填充的类。
      • QLinearGradient:线性渐变。
      • QRadialGradient:有简单辐射渐变和扩展辐射渐变两种方式。
      • QConicalGradient:圆锥形渐变。

坐标系统和坐标变换

  • QPainter提供了一些坐标变换的功能,通过平移、旋转等坐标变换,得到一个逻辑坐标系统,使用逻辑坐标系统在某些时候绘图更方便。

Graphics View绘图架构

  • 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相关的类
    • 视图类QGraphicsScene
      • QGraphicsView的视口坐标等于显示设备的物理坐标,但是也可以对QGraphicsView的坐标进行平移、旋转、缩放等变换。
    • 场景类 QGraphicsScene
      • QGraphicsScene是用于管理图形项的场景,是图形项的容器,有添加、删除图形项的函数,管理图形项的各种函数。
    • 图形项类 QGraphicsItem
      • QGraphicsItem是所有图形项的基类,用户也可以从QGraphicsItem继承定义自己的图形项。