Paint System
Qt的绘图系统对底层函数进行了良好的封装,使得在屏幕和设备的绘图功能可能使用相同一致的API。
绘图系统主要依据于QPainter,QPaintDevice和QPaintEngine三个类来实现的。QPainter表现绘图功能的操作,QPaintDevice作为可用QPainter绘制的二维空间的抽象,QPaintEngine提供了在不同设备上绘制图形的接口。QPaintEngine类其实被QPainter和QPaintDevice在内部调用,除非要自己创造另外的设备否则其对于程序员来说是隐藏的。
这种设计方式的优点在于确保了所有的绘图操作遵循相同的流程,可以很容易的开发相应的功能特性来支持其它的设备类型。
用于表示绘图操作的类
在浮点数精度级别绘制二维直线 | |
表示一个矩形的四个外边距的值 | |
在浮点数精度级别表示平面上的一个点 | |
在整数精度级别表示平面上的一个矩形 | |
在浮点数精度级别表示平面上的一个矩形 | |
在整数精度级别表示一个二维对象的尺寸 | |
在浮点数精度级别表示一个二维对象的尺寸 | |
可绘制SVG的图形设备 | |
载入SVG文件到图形设备 | |
图形化显示SVG图形 | |
在控件中绘制QStyle元素 | |
关联设备无关的QColor与设备相关的像素值 | |
单色位图 | |
可伸缩的图标,支持多种模式与状态 | |
用于渲染QIcon的抽象基类 | |
图像的硬件无关表示,可存取像素数据,也可作为绘图设备 | |
用于保存图像且与图像格式无关的接口 | |
图像的非屏幕表示,也可用作绘图设备 | |
表示N*M矩阵转换的模板类 | |
二维空间向量 | |
表示图形的填充样式 | |
渐变填充样式 | |
线型渐变 | |
辐射渐变 | |
锥型渐变 | |
基于RGB,HSV和CMYK的颜色表示 | |
支持多页的绘图设备 | |
可绘图对象的基类 | |
抽象定义QPainter如何在特定的平台上的绘图方式 | |
在控件和其它设备上绘图 | |
绘制操作的容器 | |
在路径基础上生成实际的轮廓线 | |
生成PDF | |
定义QPainter的线条样式 | |
在浮点数精度级别表示多边形 | |
指定一个剪裁区域 | |
指定2D平面的坐标变换 | |
指定用于绘制文本的字体 | |
文字尺度信息 | |
文字尺度信息(浮点) | |
当使用Qt内部的字体数据库注册时使用 | |
使自定义字体变成可能 |
绘图设备
QPaintDevice是所有可绘图设备的基类,也就是说QPainter可在任意的QPaintDevice的子类上进行绘图操作,像是QWidget,QImage,QPixmap,QPicture,QPrinter和QopenGLPaintDevice。
WidgetQWidget在QtWidgets模块中是所有用户界面元素类的基类,可以接收鼠标,键盘及其它系统信息并且绘制自身呈现在屏幕上。 |
ImageQImage提供了硬件无关的图像表示形式,极大简化了I/O与像素存取,支持单色,8位,32位和alpha透明图像。QImage的优点在于可以在不同平台确保像素的精确度,并且绘图过程是另外的线程而非当前GUI线程。 |
PixmapQPixmap提供了与屏幕无关的图像显示方式,简化了图像在屏幕上的呈现。与QImage不同的是,QPixmap的像素数据是被底层的操作系统管理的,只能通过QPainter函数来操作或者转化为QImage来操作。 Qt提供了QPixmapCache类来存储一些超出cache临时空间的图像。同时Qt提供了QBitmap子类来绘制单色图,主要用来构建自定义QCursor与QBrush对象及构建QRegion对象。
|
OpenGL PaintDeviceQOpenGlPaintDevice为QPainter提供了OpenGLAPI的支持,简化了OpenGL在Qt应用程序中的使用。 |
PictureQPicture是用来记录与重现QPainter命令的绘图设备,将绘制命令连续的传递与IO设备与平台无关。同时QPicture也是与分辨率无关的,即可在不同设备(像svg,pdf,ps,printer和屏幕)显示相同的效果。QPicture::load()与QPicture::save()可用来实行图像的数据流操作。 |
CustomBackends通过继承QPaintDevice实现其中的paintEngine()方法可自定义绘图功能,另外也必须继承QPaintEngine生成自定义的类来确保绘图功能的可行。 |
绘图与填充
绘图
QPainter提供了高度简化的GUI图形绘制操作函数,从绘制基本图元到复杂形状如矢量图形。
在Qt中矢量图形由QPainterPath来表示,其提供了绘图操作的容器,使得绘图操作得以重用。
QPen用来绘制线条与轮廓,画笔由其线条风格,宽度,画刷,终点风格,拐点风格等属性所定义。QBrush用来描述其填充图案。而且,QPainter也可绘制文本与图片。
通常情况下QPainter在默认的坐标系中,但也能够使用视口与世界变换来改变绘图与实际像素的坐标对应关系,坐标变换十分重要。
填充
填充风格通常由QBrush来定义,包括颜色与填充图案等。
在Qt中颜色由QColor来表示,可支持RGB,HSV和CMYK等模式,并且也支持alpha透明通道。最重要的是其平台无关性。
在Qt中在Qt::BrushStyle枚举变量中预定义了一些填充图案,从基本颜色到稀有图案,多样的结合线,线型填充与纹理。可参考QGradient与QPixmap。