本页内容

QPaintEngine Class

QPaintEngine 类对QPainter 如何在特定平台上向特定设备绘制图像给出了抽象定义。更多内容...

头文件: #include <QPaintEngine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

公共类型

enum DirtyFlag { DirtyPen, DirtyBrush, DirtyBrushOrigin, DirtyFont, DirtyBackground, …, AllDirty }
flags DirtyFlags
enum PaintEngineFeature { AlphaBlend, Antialiasing, BlendModes, BrushStroke, ConicalGradientFill, …, AllFeatures }
flags PaintEngineFeatures
enum PolygonDrawMode { OddEvenMode, WindingMode, ConvexMode, PolylineMode }
enum Type { X11, Windows, MacPrinter, CoreGraphics, QuickDraw, …, Direct2D }

公共函数

QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())
virtual ~QPaintEngine()
virtual bool begin(QPaintDevice *pdev) = 0
virtual void drawEllipse(const QRectF &rect)
virtual void drawEllipse(const QRect &rect)
virtual void drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor)
virtual void drawLines(const QLineF *lines, int lineCount)
virtual void drawLines(const QLine *lines, int lineCount)
virtual void drawPath(const QPainterPath &path)
virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0
virtual void drawPoints(const QPoint *points, int pointCount)
virtual void drawPoints(const QPointF *points, int pointCount)
virtual void drawPolygon(const QPointF *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
virtual void drawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
virtual void drawRects(const QRectF *rects, int rectCount)
virtual void drawRects(const QRect *rects, int rectCount)
virtual void drawTextItem(const QPointF &p, const QTextItem &textItem)
virtual void drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p)
virtual bool end() = 0
bool hasFeature(QPaintEngine::PaintEngineFeatures feature) const
bool isActive() const
QPaintDevice *paintDevice() const
QPainter *painter() const
void setActive(bool state)
virtual QPaintEngine::Type type() const = 0
virtual void updateState(const QPaintEngineState &state) = 0

详细说明

Qt 为我们支持的各种绘图后端提供了若干现成的 QPaintEngine 实现。主要提供的绘图引擎是光栅绘图引擎,其中包含一个软件光栅化器,该光栅化器在所有受支持的平台上都支持完整的功能集。 这是在 Windows、X11 和 macOS 等平台上基于 `QWidget` 的类进行绘制的默认选项,也是 `QImage ` 上的绘制后端,并被用作不支持特定功能绘制引擎的备用方案。 此外,我们还提供了适用于 OpenGL(可通过QOpenGLWidget 访问)和打印(允许使用QPainter 在QPrinter 对象上绘制)的 QPaintEngine 实现。

如果希望使用QPainter 在不同的后端上绘制,则必须继承 QPaintEngine 并重写其所有虚函数。随后,通过继承QPaintDevice 并重写虚函数QPaintDevice::paintEngine(),即可提供 QPaintEngine 的实现。

QPaintEngine 由创建它的QPaintDevice 创建并拥有。

另请参阅 QPainter 、QPaintDevice::paintEngine() 以及绘制系统。

成员类型文档

enum QPaintEngine::DirtyFlag
flags QPaintEngine::DirtyFlags

常数值描述
QPaintEngine::DirtyPen0x0001画笔已脏,需要更新。
QPaintEngine::DirtyBrush0x0002画笔已脏,需要更新。
QPaintEngine::DirtyBrushOrigin0x0004画笔原点已损坏,需要更新。
QPaintEngine::DirtyFont0x0008字体已损坏,需要更新。
QPaintEngine::DirtyBackground0x0010背景已损坏,需要更新。
QPaintEngine::DirtyBackgroundMode0x0020背景模式已发生变化,需要更新。
QPaintEngine::DirtyTransform0x0040变换已过时,需要更新。
QPaintEngine::DirtyClipRegion0x0080剪切区域已过时,需要更新。
QPaintEngine::DirtyClipPath0x0100剪切路径已发生更改,需要更新。
QPaintEngine::DirtyHints0x0200渲染提示状态已发生变化,需要更新。
QPaintEngine::DirtyCompositionMode0x0400合成模式状态已更改,需要更新。
QPaintEngine::DirtyClipEnabled0x0800剪切是否启用状态已过时,需要更新。
QPaintEngine::DirtyOpacity0x1000常量不透明度已发生变化,需要作为QPaintEngine::updateState() 中的状态变化的一部分进行更新。
QPaintEngine::AllDirty0xffff内部使用的便捷枚举。

QPainter 使用这些类型,通过QPaintEngine::updateState() 触发QPaintEngine 中各种状态的延迟更新。

绘制引擎必须更新每个已修改的状态。

DirtyFlags 类型是QFlags<DirtyFlag> 的 typedef。它存储了 DirtyFlag 值的按“或”运算组合。

enum QPaintEngine::PaintEngineFeature
flags QPaintEngine::PaintEngineFeatures

该枚举用于描述绘图引擎具备的功能或特性。如果引擎不支持某项功能,QPainter 将尽最大努力通过其他方式模拟该功能,并将包含模拟结果的带Alpha混合的QImage 传递给引擎。某些功能无法被模拟:AlphaBlend 和 PorterDuff。

常量值描述
QPaintEngine::AlphaBlend0x00000080引擎能够对基元进行 Alpha 混合。
QPaintEngine::Antialiasing0x00000400引擎可以使用抗锯齿来改善渲染基元的外观。
QPaintEngine::BlendModes0x00008000该引擎支持混合模式。
QPaintEngine::BrushStroke0x00000800引擎支持绘制包含笔刷作为填充的笔触,而不仅仅是纯色(例如宽度为 2 的虚线渐变线)。
QPaintEngine::ConicalGradientFill0x00000040该引擎支持锥形渐变填充。
QPaintEngine::ConstantOpacity0x00001000该引擎支持由 `QPainter::setOpacity()` 提供的功能。
QPaintEngine::LinearGradientFill0x00000010该引擎支持线性渐变填充。
QPaintEngine::MaskedBrush0x00002000该引擎能够渲染具有带 alpha 通道或蒙版纹理的画笔。
QPaintEngine::ObjectBoundingModeGradients0x00010000该引擎原生支持坐标模式为QGradient::ObjectBoundingMode 的渐变。否则,如果支持 QPaintEngine::PatternTransform,则对象边界模式的渐变将转换为坐标模式为QGradient::LogicalMode 的渐变,并使用画笔变换进行坐标映射。
QPaintEngine::PainterPaths0x00000200该引擎支持路径。
QPaintEngine::PaintOutsidePaintEvent0x20000000该引擎能够在绘制事件之外进行绘制。
QPaintEngine::PatternBrush0x00000008该引擎能够渲染使用Qt::BrushStyle 中指定的画笔图案的画笔。
QPaintEngine::PatternTransform0x00000002该引擎支持对画笔图案进行变换。
QPaintEngine::PerspectiveTransform0x00004000该引擎支持对基元执行透视变换。
QPaintEngine::PixmapTransform0x00000004引擎可以变换位图,包括旋转和剪切。
QPaintEngine::PorterDuff0x00000100该引擎支持 Porter-Duff 运算
QPaintEngine::PrimitiveTransform0x00000001该引擎支持对绘图基元进行变换。
QPaintEngine::RadialGradientFill0x00000020该引擎支持径向渐变填充。
QPaintEngine::RasterOpModes0x00020000该引擎支持位级光栅操作。
QPaintEngine::AllFeatures0xffffffff上述所有功能。该枚举值通常用作位掩码。

PaintEngineFeatures 类型是QFlags<PaintEngineFeature> 的 typedef。它存储了 PaintEngineFeature 值的按“或”运算组合。

enum QPaintEngine::PolygonDrawMode

常数值描述
QPaintEngine::OddEvenMode0应使用“奇偶”填充规则绘制多边形。
QPaintEngine::WindingMode1应使用“Winding”填充规则绘制该多边形。
QPaintEngine::ConvexMode2该多边形为凸多边形,如有专用算法,可使用该算法进行绘制。
QPaintEngine::PolylineMode3仅应绘制多边形的轮廓。

enum QPaintEngine::Type

常数值描述
QPaintEngine::X110 
QPaintEngine::Windows1 
QPaintEngine::MacPrinter4 
QPaintEngine::CoreGraphics3macOS 的 Quartz2D(CoreGraphics)
QPaintEngine::QuickDraw2macOS 的 QuickDraw
QPaintEngine::QWindowSystem5适用于嵌入式 Linux 的 Qt
QPaintEngine::OpenGL6 
QPaintEngine::Picture7QPicture 格式
QPaintEngine::SVG8可缩放矢量图形 XML 格式
QPaintEngine::Raster9 
QPaintEngine::Direct3D10仅限 Windows,基于 Direct3D 的引擎
QPaintEngine::Pdf11便携式文档格式
QPaintEngine::OpenVG12 
QPaintEngine::User50首个用户类型ID
QPaintEngine::MaxUser100最后一个用户类型 ID
QPaintEngine::OpenGL213 
QPaintEngine::PaintBuffer14 
QPaintEngine::Blitter15 
QPaintEngine::Direct2D16仅限 Windows,基于 Direct2D 的引擎

成员函数文档

[explicit] QPaintEngine::QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())

创建一个具有由caps 指定的功能集的绘图引擎。

[virtual noexcept] QPaintEngine::~QPaintEngine()

破坏了绘图引擎。

[pure virtual] bool QPaintEngine::begin(QPaintDevice *pdev)

请重写此函数,以便在绘制设备pdev 上开始绘制时初始化您的绘制引擎。如果初始化成功,则返回 true;否则返回 false。

另请参阅 end() 和isActive()。

[virtual] void QPaintEngine::drawEllipse(const QRectF &rect)

重写此函数,以绘制能够完全容纳于矩形rect 内的最大椭圆。

默认实现会调用drawPolygon()。

[virtual] void QPaintEngine::drawEllipse(const QRect &rect)

该函数的默认实现会调用该函数的浮点版本

这是一个重载函数。

[virtual] void QPaintEngine::drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor)

重写此函数,以使用给定的转换标志flags ,将image 中由矩形sr 指定的部分绘制到给定的rectangle 中,并将其转换为位图。

[virtual] void QPaintEngine::drawLines(const QLineF *lines, int lineCount)

默认实现会将lines 中的行列表拆分为lineCount 个独立的调用,具体调用drawPath()或drawPolygon()取决于绘图引擎的功能集。

[virtual] void QPaintEngine::drawLines(const QLine *lines, int lineCount)

默认实现将lines 中的前lineCount 行转换为QLineF ,并调用该函数的浮点版本。

这是一个重载函数。

[virtual] void QPaintEngine::drawPath(const QPainterPath &path)

默认实现会忽略path 方法,并不执行任何操作。

[pure virtual] void QPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)

重写此函数,以在给定的r 中绘制由sr 矩形指定的pm 部分。

[virtual] void QPaintEngine::drawPoints(const QPoint *points, int pointCount)

在缓冲区中绘制前pointCount 个点points

默认实现会将points 中前pointCount 个QPoint转换为QPointF,并调用drawPoints的浮点版本。

[virtual] void QPaintEngine::drawPoints(const QPointF *points, int pointCount)

在缓冲区中绘制前pointCount 个点points

[virtual] void QPaintEngine::drawPolygon(const QPointF *points, int pointCount, QPaintEngine::PolygonDrawMode mode)

重写此虚函数,以使用模式 `mode` 绘制由 `pointCount ` 中的 `points` 中的前几个点定义的多边形。

注意: 必须重写至少 一个 drawPolygon() 函数。

[virtual] void QPaintEngine::drawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode)

重写此虚函数,以使用模式 `mode` 绘制由 `pointCount ` 中的 `points` 中的前几个点定义的多边形。

注意: 必须重写至少 一个 drawPolygon() 函数。

这是一个重载函数。

[virtual] void QPaintEngine::drawRects(const QRectF *rects, int rectCount)

在缓冲区rects 中绘制前rectCount 个矩形。该函数的默认实现会根据绘图引擎的功能集,调用drawPath()或drawPolygon()。

[virtual] void QPaintEngine::drawRects(const QRect *rects, int rectCount)

默认实现将缓冲区rects 中的前rectCount 个矩形转换为QRectF ,并调用该函数的浮点版本。

这是一个重载函数。

[virtual] void QPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem)

该函数在坐标p 处绘制文本项textItem 。该函数的默认实现会将文本转换为QPainterPath ,并绘制生成的路径。

[virtual] void QPaintEngine::drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p)

重写此函数,以便在给定的rect 中绘制pixmap ,起始位置为给定的p 。将反复绘制该像素图,直到rect 被填满。

[pure virtual] bool QPaintEngine::end()

重写此函数以完成在当前绘制设备上的绘制操作。如果绘制成功,则返回 true;否则返回 false。

另请参阅 begin() 和isActive()。

bool QPaintEngine::hasFeature(QPaintEngine::PaintEngineFeatures feature) const

如果绘制引擎支持指定的feature ,则返回true ;否则返回false 。

bool QPaintEngine::isActive() const

如果绘制引擎正在进行绘制,则返回true ;否则返回false 。

另请参阅 setActive()。

QPaintDevice *QPaintEngine::paintDevice() const

如果绘制操作处于活动状态,则返回该引擎正在进行绘制的设备;否则返回nullptr 。

QPainter *QPaintEngine::painter() const

返回绘图引擎的绘图器。

void QPaintEngine::setActive(bool state)

将绘制引擎的活动状态设置为state 。

另请参阅 isActive()。

[pure virtual] QPaintEngine::Type QPaintEngine::type() const

重写此函数,使其返回绘图引擎Type 。

[pure virtual] void QPaintEngine::updateState(const QPaintEngineState &state)

重写此函数以更新绘制引擎的状态。

实现后,该函数负责检查绘制引擎的当前state ,并更新已发生变化的属性。请使用QPaintEngineState::state()函数确定需要更新的属性,然后使用相应的get function 获取给定属性的当前值。

另请参阅 QPaintEngineState 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.