QPaintEngine 类
QPaintEngine类提供了有关QPainter如何绘制到给定平台上给定设备的抽象定义。
Header | #include < QPaintEngine > |
---|---|
qmake | QT += gui |
Inherited By |
详述
Qt为我们支持的不同painter后端提供了QPaintEngine的几种预制实现。提供的主要绘制引擎是光栅绘制引擎,它包含一个软件光栅化程序,该光栅化程序支持所有受支持平台上的全部功能集。这是例如在基于QWidget的类上绘画的默认设置。在Windows,X11和macOS上,它是QImage绘画的后端,并且用作不支持某些功能的绘画引擎的后备。此外,我们为OpenGL(可通过QOpenGLWidget访问)和打印(允许使用QPainter绘制QPrinter对象)提供QPaintEngine实现。
如果要使用QPainter绘制到另一后端,则必须继承QPaintEngine的子类并重新实现其所有虚拟功能。然后,通过子类化QPaintDevice并重新实现虚拟函数QPaintDevice :: paintEngine() ,可以使用QPaintEngine实现。
QPaintEngine由创建它的QPaintDevice创建并拥有。
另请参见QPainter,QPaintDevice :: paintEngine() 和Paint System。
公共类型
enum DirtyFlag
flags DirtyFlags
Constant | Value | Description |
---|---|---|
DirtyPen | 0x0001 | 笔很脏,需要更新。 |
DirtyBrush | 0x0002 | 刷子很脏,需要更新。 |
DirtyBrushOrigin | 0x0004 | 笔刷原点很脏,需要更新。 |
DirtyFont | 0x0008 | 字体变脏,需要更新。 |
DirtyBackground | 0x0010 | 背景很脏,需要更新。 |
DirtyBackgroundMode | 0x0020 | 后台模式很脏,需要更新。 |
DirtyTransform | 0x0040 | 转换很脏,需要更新。 |
DirtyClipRegion | 0x0080 | 剪辑区域很脏,需要更新。 |
DirtyClipPath | 0x0100 | 剪辑路径很脏,需要更新。 |
DirtyHints | 0x0200 | 渲染提示很脏,需要更新。 |
DirtyCompositionMode | 0x0400 | 合成模式很脏,需要更新。 |
DirtyClipEnabled | 0x0800 | 是否启用裁剪是肮脏的,需要更新。 |
DirtyOpacity | 0x1000 | 恒定的不透明度已更改,需要作为QPaintEngine :: updateState() 中状态更改的一部分进行更新。 |
AllDirty | 0xffff | 内部使用的方便枚举。 |
QPainter使用这些类型通过QPaintEngine :: updateState() 触发QPaintEngine中各种状态的延迟更新。
绘制引擎必须更新每个脏状态。
enum PaintEngineFeature
flags PaintEngineFeatures
该枚举用于描述绘画引擎具有的功能。 如果引擎不支持某个功能,则QPainter将尽最大努力通过其他方式来仿真该功能,并将具有alpha混合效果的QImage传递给引擎,并提供仿真结果。 某些功能无法仿真:AlphaBlend和PorterDuff。
Constant | Value | Description |
---|---|---|
AlphaBlend | 0x00000080 | 引擎可以alpha混合基元。 |
Antialiasing | 0x00000400 | 引擎可以使用抗锯齿来改善渲染图元的外观。 |
BlendModes | 0x00008000 | 引擎支持混合模式。 |
BrushStroke | 0x00000800 | 引擎支持包含笔刷作为填充的绘图笔触,而不仅仅是纯色(例如,宽度2的虚线渐变线)。 |
ConicalGradientFill | 0x00000040 | 引擎支持圆锥形渐变填充。 |
ConstantOpacity | 0x00001000 | 该引擎支持QPainter :: setOpacity()提供的功能。 |
LinearGradientFill | 0x00000010 | 引擎支持线性渐变填充。 |
MaskedBrush | 0x00002000 | 该引擎能够渲染具有带有Alpha通道或蒙版的纹理的笔刷。 |
ObjectBoundingModeGradients | 0x00010000 | 该引擎对坐标模式为QGradient :: ObjectBoundingMode的渐变具有本地支持。否则,如果支持QPaintEngine :: PatternTransform,则将对象边界模式渐变转换为具有坐标模式QGradient :: LogicalMode和用于坐标映射的画笔变换的渐变。 |
PainterPaths | 0x00000200 | 引擎具有路径支持。 |
PaintOutsidePaintEvent | 0x20000000 | 该引擎能够在绘画事件之外进行绘画。 |
PatternBrush | 0x00000008 | 引擎能够使用Qt :: BrushStyle中指定的画笔图案渲染画笔。 |
PatternTransform | 0x00000002 | 该引擎支持转换画笔图案。 |
PerspectiveTransform | 0x00004000 | 该引擎支持对基元执行透视转换。 |
PixmapTransform | 0x00000004 | 该引擎可以变换像素图,包括旋转和剪切。 |
PorterDuff | 0x00000100 | 该引擎支持Porter-Duff操作 |
PrimitiveTransform | 0x00000001 | 该引擎支持转换绘图图元。 |
RadialGradientFill | 0x00000020 | 引擎支持径向渐变填充。 |
RasterOpModes | 0x00020000 | 引擎支持按位栅格操作。 |
AllFeatures | 0xffffffff | 以上所有功能。此枚举值通常用作位掩码。 |
enum PolygonDrawMode
Constant | Value | Description |
---|---|---|
OddEvenMode | 0 | 多边形应使用OddEven填充规则绘制。 |
WindingMode | 1 | 多边形应使用绕线填充规则绘制。 |
ConvexMode | 2 | 多边形是凸多边形,可以使用可用的专用算法进行绘制。 |
PolylineMode | 3 | 仅应绘制多边形的轮廓。 |
enum Type
Constant | Value | Description |
---|---|---|
X11 | 0 | |
Windows | 1 | |
QuickDraw | 2 | macOS的QuickDraw |
CoreGraphics | 3 | macOS的Quartz2D(CoreGraphics) |
MacPrinter | 4 | |
QWindowSystem | 5 | 嵌入式Linux的Qt |
PostScript | 6 | (不再支持) |
OpenGL | 7 | |
Picture | 8 | QPicture格式 |
SVG | 9 | 可伸缩矢量图形XML格式 |
Raster | 10 | |
Direct3D | 11 | 仅Windows,基于Direct3D的引擎 |
12 | 便携式文件格式 | |
OpenVG | 13 | |
OpenGL2 | 14 | |
PaintBuffer | 15 | |
Blitter | 16 | |
Direct2D | 17 | 仅Windows,基于Direct2D的引擎 |
User | 50 | 第一用户类型ID |
MaxUser | 100 | 上次用户类型ID |
公共函数
- QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())
- virtual ~QPaintEngine()
- virtual bool begin(QPaintDevice *pdev) = 0
- virtual bool end() = 0
- virtual void drawEllipse(…)
- virtual void drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor)
- virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0
- virtual void drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p)
- virtual void drawLines(…)
- virtual void drawPath(const QPainterPath &path)
- virtual void drawPoints(…)
- virtual void drawPolygon(…)
- virtual void drawRects(…)
- virtual void drawTextItem(const QPointF &p, const QTextItem &textItem)
- bool hasFeature(QPaintEngine::PaintEngineFeatures feature) const
- bool isActive() const
- void setActive(bool state)
- virtual void updateState(const QPaintEngineState &state) = 0
- QPaintDevice * paintDevice() const
- QPainter * painter() const
- virtual QPaintEngine::Type type() const = 0