文章目录
- 一.Qt绘图系统简介
- 二.支持绘图系统的类
- 三.绘图后端
- 四.绘图和填充
- 绘图
- 填充
- Qt::BrushStyle
- 五.坐标系系统
一.Qt绘图系统简介
Qt的绘画系统支持使用相同的API在屏幕和打印设备上进行绘画,并且主要基于QPainter、QPaintDevice和QPaintEngine类。这种方法的主要优点是,所有绘制都遵循相同的绘制管道,从而可以轻松添加对新功能的支持,并为不支持的功能提供默认实现。
- QPainter用于执行绘制操作
- QPaintDevice是可以使用QPainter绘制的二维空间的抽象,
- QPaintEngine提供了画家用于在不同类型的设备上绘制的界面。QPaintEngine类由QPainter和QPaintDevice内部使用,除非应用程序程序员创建自己的设备类型,否则对他们来说是隐藏的。
二.支持绘图系统的类
类 | 说明 |
---|---|
QBitmap | 单色(1位深度)像素图 |
QBrush | 定义QPainter绘制的形状的填充图案 |
QColor | 基于RGB、HSV或CMYK值的颜色 |
QColorSpace | 颜色空间抽象 |
QColorTransform | 颜色空间之间的转换 |
QColormap | 将与设备无关的QColors映射到与设备相关的像素值 |
QConicalGradient | 与QBrush结合使用,指定锥形渐变笔刷 |
QFont | 指定用于图形文本的字体查询 |
QFontMetrics | 字体度量信息 |
QFontMetricsF | 字体度量信息 |
QGenericMatrix | 表示具有N列和M行的NxM转换矩阵的模板类 |
QGradient | 与QBrush结合使用以指定渐变填充 |
QIcon | 不同模式和状态下的可扩展图标 |
QIconEngine | QIcon渲染器的抽象基类 |
QImage | 硬件独立的图像表示,允许直接访问像素数据,并可用作绘制设备 |
QImageReader | 用于从文件或其他设备读取图像的独立于格式的界面 |
QImageWriter | 用于将图像写入文件或其他设备的格式独立接口 |
QLine | 使用整数精度的二维矢量 |
QLineF | 使用浮点精度的二维矢量 |
QLinearGradient | 与QBrush结合使用以指定线性渐变笔刷 |
QMargins | 定义矩形的四个边距 |
QMarginsF | 定义矩形的四个边距 |
QPagedPaintDevice | 表示支持多页的绘制设备 |
QPaintDevice | 可以使用QPainter绘制的对象的基类 |
QPaintEngine | QPainter如何在给定平台上绘制给定设备的抽象定义 |
QPainter | 在小部件和其他绘制设备上执行低级绘制 |
QPainterPath | 用于绘制操作的容器,允许构建和重用图形形状 |
QPainterPathStroker | 用于生成给定画家路径的可填充轮廓 |
QPdfWriter | 类生成可用作绘制设备的PDF |
QPen | 定义QPainter应如何绘制形状的线条和轮廓 |
QPixmap | 可用作绘画设备的屏幕外图像表示 |
QPoint | 使用整数精度定义平面中的点 |
QPointF | 使用浮点精度定义平面中的点 |
QPolygon | 使用整数精度的点矢量 |
QPolygonF | 使用浮点精度的点矢量 |
QRadialGradient | 与QBrush结合使用以指定径向渐变笔刷 |
QRect | 使用整数精度定义平面中的矩形 |
QRectF | 使用浮点精度定义平面中的矩形 |
QRegion | 指定画家的剪辑区域 |
QRgba64 | 结构包含64位RGB颜色 |
QSize | 使用整数点精度定义二维对象的大小 |
QSizeF | 使用浮点精度定义二维对象的大小 |
QStylePainter | 用于在小部件中绘制QStyle元素的便利类 |
QSupportedWritingSystems | 在内部Qt字体数据库中注册字体时使用 |
QSvgGenerator | 用于创建SVG图形的绘制设备 |
QSvgRenderer | 用于将SVG文件的内容绘制到绘图设备上 |
QSvgWidget | 用于显示可缩放矢量图形(SVG)文件内容的小部件 |
QTransform | 指定坐标系的二维变换 |
QVector2D | 表示二维空间中的向量或顶点 |
三.绘图后端
QPaintDevice 类是可以绘制的对象的基类,即 QPainter 可以在任何QPaint设备子类上绘制。QPaintDevice的绘图功能由 QWidget, QImage, QPixmap, QPicture, QPrinter, 以及QOpenGLPaintDevice.实现。
Widget QWidget 类是 Qt Widgets 模块中用户界面元素的基类。它从窗口系统接收鼠标、键盘和其他事件,并在屏幕上绘制自己的表示。 |
Image QImage类提供了一种独立于硬件的图像表示,它针对I/O以及直接像素访问和操作进行了设计和优化。 QImage支持多种图像格式,包括单色、8位、32位和阿尔法混合图像。 使用 QImage作为绘制设备的一个优点是可以以独立于平台的方式保证任何绘制操作的像素精度。另一个好处是可以在当前GUI线程之外的另一个线程中执行绘制。 |
Pixmap QPixmap 类是一种屏幕外图像表示,它是为在屏幕上显示图像而设计和优化的。与QImage不同,像素图中的像素数据是内部的,由底层窗口系统管理,即像素只能通过QPainter函数或通过将QPixmap转换为QImage来访问。 为了优化使用QPixmap的绘图,Qt提供了 QPixmapCache 类,该类可用于存储临时像素映射,生成这些临时像素映射时不需要使用超过缓存限制的更多存储空间。 Qt还提供了QBitmap便利类,继承了 QPixmap。 QBitmap 保证单色(1位深度)像素图,主要用于创建自定义QCursor和Brush 对象,构建QRegion对象。 |
OpenGL Paint Device 如前所述,Qt提供的类使在Qt应用程序中使用OpenGL变得容易。例如, QOpenGLPaintDevice启用OpenGL API以使用QPainter进行渲染。 |
Picture QPicture类是一个记录和回放QPainter命令的绘制设备。图片以独立于平台的格式将画家命令序列化到IO设备。QPicture也是独立于分辨率的,即QPicture可以显示在看起来相同的不同设备上(例如svg、pdf、ps、打印机和屏幕)。 Qt提供了 QPicture::load() 和 QPicture::save()函数以及用于加载和保存图片的流运算符。 |
Custom Backends 通过从QPaintDevice 类派生并重新实现虚拟 QPaintDevice::paintEngine()函数,可以实现对新后端的支持,以告诉 QPainter 应该使用哪个绘制引擎在该特定设备上绘制。要真正能够在设备上绘制,此绘制引擎必须是通过从QPaintEngine类派生而创建的自定义绘制引擎。 |
四.绘图和填充
绘图
QPainter 提供了高度优化的功能来完成大多数GUI程序所需的绘图。它可以绘制从简单图形图元(由 QPoint, QLine, QRect, QRegion 和QPolygon 类表示)到复杂形状(如矢量路径)的所有内容。在Qt中,矢量路径由QPainterPath 类表示。QPainterPath 提供了一个用于绘制操作的容器,允许构建和重用图形形状。
QPainterPath是由直线和曲线组成的对象。例如,矩形由直线组成,椭圆由曲线组成。与普通绘图操作相比,绘制路径的主要优点是复杂的形状只需要创建一次;然后可以只调用QPainter::drawPath()函数多次绘制它们。QPainterPath 对象可用于填充、勾勒和剪裁。若要为给定的绘制者路径生成可填充轮廓,请使用QPainterPathStroker 类。
使用 QPen类绘制线条和轮廓。钢笔由其样式(即线型)、宽度、画笔、端点的绘制方式(封口样式)以及两条连接线之间的连接方式(连接样式)定义。笔的画笔是一个QBrush对象,用于填充用笔生成的笔划,即 QBrush 类定义了填充模式。QPainter 还可以绘制对齐的文本和位图。绘制文本时,使用 QFont 类指定字体。Qt将使用具有指定属性的字体,或者如果不存在匹配的字体,Qt将采用最匹配的已安装字体。可以使用QFontInfo 类检索实际使用的字体的属性。此外,QFontMetrics 类提供字体度量,QFontDatabase类提供有关底层窗口系统中可用字体的信息。通常,QPainter 在 Coordinate System中绘制,但它能够使用QTransform 类执行视图和世界变换。有关详细信息,请参见坐标系,它还描述了渲染过程,即逻辑表示和渲染像素之间的关系,以及抗锯齿绘制的好处。
填充
形状使用QBrush类填充。画笔由其颜色和样式(即填充图案)定义。
Qt中的任何颜色都由支持RGB、HSV和CMYK颜色模型的QColor类表示。QColor还支持alpha混合的轮廓和填充(指定透明度效果),该类与平台和设备无关(使用 QColormap类将颜色映射到硬件)。有关详细信息,请参阅QColor类文档。可用的填充模式由 Qt::BrushStyle 枚举描述。这些包括从均匀颜色到非常稀疏图案的基本图案、各种线条组合、渐变填充和纹理。Qt提供了 QGradient 类来定义自定义渐变填充,而纹理模式是使用 QPixmap 类指定的。
Qt::BrushStyle
内容 | 值 | 说明 |
---|---|---|
Qt::NoBrush | 0 | 无笔刷图案 |
Qt::SolidPattern | 1 | 统一的颜色 |
Qt::Dense1Pattern | 2 | 极其密集的刷纹 |
Qt::Dense2Pattern | 3 | 非常密集的刷纹 |
Qt::Dense3Pattern | 4 | 有点密集的笔刷图案 |
Qt::Dense4Pattern | 5 | 半密刷纹 |
Qt::Dense5Pattern | 6 | 有点稀疏的笔刷图案 |
Qt::Dense6Pattern | 7 | 非常稀疏的笔刷图案 |
Qt::Dense7Pattern | 8 | 极其稀疏的笔刷图案 |
Qt::HorPattern | 9 | 水平线 |
Qt::VerPattern | 10 | 垂直线 |
Qt::CrossPattern | 11 | 交叉水平线和垂直线 |
Qt::BDiagPattern | 12 | 后对角线 |
Qt::FDiagPattern | 13 | 向前对角线 |
Qt::DiagCrossPattern | 14 | 交叉对角线 |
Qt::LinearGradientPattern | 15 | 线性梯度QBrush |
Qt::ConicalGradientPattern | 17 | 锥形梯度QBrush |
Qt::RadialGradientPattern | 16 | 径向梯度QBrush |
Qt::TexturePattern | 24 | 自定义图案 |
五.坐标系系统
绘制设备的默认坐标系的原点位于左上角。x值向右增加,y值向下增加。默认单位是基于像素的设备上的一个像素,打印机上的一点(1/72英寸)。
逻辑QPainter 坐标到物理 QPaintDevice 坐标的映射由QPainter 的变换矩阵、视口和“窗口”处理。默认情况下,逻辑坐标系和物理坐标系重合。QPainter 还支持坐标变换(例如旋转和缩放)。