QPaintEngine Class
QPaintEngine 类提供了QPainter 在特定平台上向特定设备绘图的抽象定义。更多
Header: | #include <QPaintEngine> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
- 所有成员(包括继承成员)的列表
- QPaintEngine 属于绘画类。
公共类型
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 的预制实现。提供的主要绘画引擎是光栅绘画引擎,它包含一个软件光栅化器,支持所有支持平台上的全部功能集。这是基于QWidget 的类的默认绘制引擎,例如在 Windows、X11 和 macOS 上,它是在QImage 上绘制的后端,也是不支持特定功能的绘制引擎的备用引擎。此外,我们还为 OpenGL(可通过QOpenGLWidget 访问)和打印(允许使用QPainter 在QPrinter 对象上绘图)提供了 QPaintEngine 实现。
如果要使用QPainter 在不同的后端绘图,则必须子类化 QPaintEngine 并重新实现其所有虚拟函数。然后,可以通过子类化QPaintDevice 并重新实现虚函数QPaintDevice::paintEngine() 来实现 QPaintEngine。
QPaintEngine 由创建它的QPaintDevice 创建和拥有。
另请参阅 QPainter,QPaintDevice::paintEngine() 和Paint System。
成员类型文档
枚举 QPaintEngine::DirtyFlag
flags QPaintEngine::DirtyFlags
常量 | 值 | 说明 |
---|---|---|
QPaintEngine::DirtyPen | 0x0001 | 钢笔脏了,需要更新。 |
QPaintEngine::DirtyBrush | 0x0002 | 画笔脏了,需要更新。 |
QPaintEngine::DirtyBrushOrigin | 0x0004 | 画笔原点脏污,需要更新。 |
QPaintEngine::DirtyFont | 0x0008 | 字体脏污,需要更新。 |
QPaintEngine::DirtyBackground | 0x0010 | 背景脏污,需要更新。 |
QPaintEngine::DirtyBackgroundMode | 0x0020 | 背景模式已损坏,需要更新。 |
QPaintEngine::DirtyTransform | 0x0040 | 变换已损坏,需要更新。 |
QPaintEngine::DirtyClipRegion | 0x0080 | 剪辑区域已损坏,需要更新。 |
QPaintEngine::DirtyClipPath | 0x0100 | 剪辑路径已损坏,需要更新。 |
QPaintEngine::DirtyHints | 0x0200 | 渲染提示已损坏,需要更新。 |
QPaintEngine::DirtyCompositionMode | 0x0400 | 合成模式已损坏,需要更新。 |
QPaintEngine::DirtyClipEnabled | 0x0800 | 剪辑是否启用已损坏,需要更新。 |
QPaintEngine::DirtyOpacity | 0x1000 | 不透明度常量已更改,需要作为QPaintEngine::updateState() 中状态更改的一部分进行更新。 |
QPaintEngine::AllDirty | 0xffff | 内部使用的方便枚举。 |
这些类型由QPainter 使用QPaintEngine::updateState() 触发QPaintEngine 中各种状态的懒更新。
油漆引擎必须更新每个脏状态。
DirtyFlags 类型是QFlags<DirtyFlag> 的类型定义。它存储 DirtyFlag 值的 OR 组合。
枚举QPaintEngine::PaintEngineFeature
flags QPaintEngine::PaintEngineFeatures
此枚举用于描述喷绘引擎的特性或功能。如果引擎不支持某项功能,QPainter 将尽最大努力通过其他方法模拟该功能,并向引擎传递带有模拟结果的 alpha 混合QImage 。有些功能无法模拟:AlphaBlend 和 PorterDuff。
常数 | 值 | 描述 |
---|---|---|
QPaintEngine::AlphaBlend | 0x00000080 | 引擎可以对基元进行 Alpha 混合。 |
QPaintEngine::Antialiasing | 0x00000400 | 引擎可以使用抗锯齿来改善渲染基元的外观。 |
QPaintEngine::BlendModes | 0x00008000 | 引擎支持混合模式。 |
QPaintEngine::BrushStroke | 0x00000800 | 引擎支持绘制包含笔刷的填充笔画,而不仅仅是纯色(例如宽度为 2 的虚线渐变线)。 |
QPaintEngine::ConicalGradientFill | 0x00000040 | 引擎支持锥形渐变填充。 |
QPaintEngine::ConstantOpacity | 0x00001000 | 引擎支持QPainter::setOpacity() 提供的功能。 |
QPaintEngine::LinearGradientFill | 0x00000010 | 引擎支持线性渐变填充。 |
QPaintEngine::MaskedBrush | 0x00002000 | 引擎能够渲染带有 alpha 通道或遮罩的纹理的笔刷。 |
QPaintEngine::ObjectBoundingModeGradients | 0x00010000 | 引擎本机支持坐标模式为QGradient::ObjectBoundingMode 的渐变。否则,如果支持 QPaintEngine::PatternTransform,对象边界模式渐变将转换为坐标模式渐变QGradient::LogicalMode ,并通过画笔变换进行坐标映射。 |
QPaintEngine::PainterPaths | 0x00000200 | 引擎支持路径。 |
QPaintEngine::PaintOutsidePaintEvent | 0x20000000 | 引擎能够在绘画事件之外进行绘画。 |
QPaintEngine::PatternBrush | 0x00000008 | 引擎能够使用Qt::BrushStyle 中指定的画笔模式渲染画笔。 |
QPaintEngine::PatternTransform | 0x00000002 | 引擎支持笔刷图案变换。 |
QPaintEngine::PerspectiveTransform | 0x00004000 | 引擎支持对基元执行透视变换。 |
QPaintEngine::PixmapTransform | 0x00000004 | 引擎可变换像素图,包括旋转和剪切。 |
QPaintEngine::PorterDuff | 0x00000100 | 引擎支持波特-达夫(Porter-Duff)操作 |
QPaintEngine::PrimitiveTransform | 0x00000001 | 引擎支持变换绘图基元。 |
QPaintEngine::RadialGradientFill | 0x00000020 | 引擎支持径向渐变填充。 |
QPaintEngine::RasterOpModes | 0x00020000 | 引擎支持比特光栅操作。 |
QPaintEngine::AllFeatures | 0xffffffff | 以上所有功能。该枚举值通常用作位掩码。 |
PaintEngineFeatures 类型是QFlags<PaintEngineFeature> 的类型定义。它存储 PaintEngineFeature 值的 OR 组合。
enum QPaintEngine::PolygonDrawMode
常数 | 值 | 说明 |
---|---|---|
QPaintEngine::OddEvenMode | 0 | 应使用奇偶填充规则绘制多边形。 |
QPaintEngine::WindingMode | 1 | 应使用 Winding 填充规则绘制多边形。 |
QPaintEngine::ConvexMode | 2 | 该多边形是一个凸多边形,可以使用可用的专门算法绘制。 |
QPaintEngine::PolylineMode | 3 | 应仅绘制多边形的轮廓。 |
enum QPaintEngine::Type
常数 | 值 | 描述 |
---|---|---|
QPaintEngine::X11 | 0 | |
QPaintEngine::Windows | 1 | |
QPaintEngine::MacPrinter | 4 | |
QPaintEngine::CoreGraphics | 3 | macOS 的 Quartz2D(CoreGraphics) |
QPaintEngine::QuickDraw | 2 | macOS 的 QuickDraw |
QPaintEngine::QWindowSystem | 5 | 嵌入式 Linux 的 Qt |
QPaintEngine::OpenGL | 6 | |
QPaintEngine::Picture | 7 | QPicture 格式 |
QPaintEngine::SVG | 8 | 可扩展矢量图形 XML 格式 |
QPaintEngine::Raster | 9 | |
QPaintEngine::Direct3D | 10 | 仅限 Windows,基于 Direct3D 引擎 |
QPaintEngine::Pdf | 11 | 便携式文档格式 |
QPaintEngine::OpenVG | 12 | |
QPaintEngine::User | 50 | 第一个用户类型 ID |
QPaintEngine::MaxUser | 100 | 最后用户类型 ID |
QPaintEngine::OpenGL2 | 13 | |
QPaintEngine::PaintBuffer | 14 | |
QPaintEngine::Blitter | 15 | |
QPaintEngine::Direct2D | 16 | 仅限 Windows,基于 Direct2D 引擎 |
成员函数文档
[explicit]
QPaintEngine::QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())
使用caps 指定的特征集创建油漆引擎。
[virtual noexcept]
QPaintEngine::~QPaintEngine()
破坏喷漆引擎。
[pure virtual]
bool QPaintEngine::begin(QPaintDevice *pdev)
重新实现此函数,以便在绘画设备pdev 上开始绘画时初始化绘画引擎。如果初始化成功,则返回 true;否则返回 false。
[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 ,在给定的rectangle 中绘制sr 矩形指定的image 部分,将其转换为像素图。
[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 QPoints 转换为 QPointFs,然后调用浮点版 drawPoints。
[virtual]
void QPaintEngine::drawPoints(const QPointF *points, int pointCount)
绘制缓冲区中的第一个pointCount 点points
[virtual]
void QPaintEngine::drawPolygon(const QPointF *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
重新实现此虚函数,以绘制pointCount 第一个点在points 中定义的多边形,使用模式mode 。
注: 必须重新实现至少一个 drawPolygon() 函数。
[virtual]
void QPaintEngine::drawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
这是一个重载函数。
重新实现此虚函数可绘制pointCount 第一个点在points 中定义的多边形,使用模式mode 。
注意: 必须重新实现至少一个 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)
重新实现此函数,从给定的p 开始,在给定的rect 中绘制pixmap 。像素图将重复绘制,直到rect 填满为止。
[pure virtual]
bool QPaintEngine::end()
重新执行此函数以完成当前喷涂设备上的喷涂。如果上色成功,则返回 true;否则返回 false。
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 。
© 2025 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.