QPaintEngine 类
QPaintEngine 类提供了一个在特定平台上的特定设备上如何绘制 QPainter 的抽象定义。更多...
头文件 | #include <QPaintEngine> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
- 包括所有成员,包括继承的成员
- QPaintEngine 是 绘图类 的一部分。
公共类型
枚举 | DirtyFlag { DirtyPen, DirtyBrush, DirtyBrushOrigin, DirtyFont, DirtyBackground, …, AllDirty } |
标志 | DirtyFlags |
枚举 | PaintEngineFeature { AlphaBlend, Antialiasing, BlendModes, BrushStroke, ConicalGradientFill, …, AllFeatures } |
标志 | PaintEngineFeatures |
枚举 | PolygonDrawMode { OddEvenMode, WindingMode, ConvexMode, PolylineMode } |
枚举 | Type { X11, Windows, MacPrinter, CoreGraphics, QuickDraw, …, Direct2D } |
公共函数
QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures()) | |
虚拟 | ~QPaintEngine() |
虚拟 bool | begin(QPaintDevice *pdev) = 0 |
虚拟 void | drawEllipse(const QRectF &rect) |
虚拟 void | drawEllipse(const QRect &rect) |
虚拟 void | drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor) |
虚拟 void | drawLines(const QLineF *lines, int lineCount) |
虚拟 void | drawLines(const QLine *lines, int lineCount) |
虚拟 void | drawPath(const QPainterPath &path) |
虚拟 void | drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0 |
虚拟 void | drawPoints(const QPointF *points, int pointCount) |
虚拟 void | drawPoints(const QPoint *points, int pointCount) |
虚拟 void | drawPolygon(const QPointF *points, int pointCount, QPaintEngine::PolygonDrawMode mode) |
虚拟 void | drawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode) |
虚拟 void | drawRects(const QRectF *rects, int rectCount) |
虚拟 void | drawRects(const QRect *rects, int rectCount) |
虚拟 void | drawTextItem(const QPointF &p, const QTextItem &textItem) |
虚拟 void | drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p) |
虚拟 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 |
虚拟 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() 以及 绘制系统。
成员类型文档
枚举 QPaintEngine::DirtyFlag
标志 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
枚举 QPaintEngine::PaintEngineFeature
标志 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 | 该引擎能够处理 paint 事件以外的绘制。 |
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 值的逻辑或组合。
枚举 QPaintEngine::PolygonDrawMode
常量 | 值 | 描述 |
---|---|---|
QPaintEngine::OddEvenMode | 0 | 应该使用奇偶填充规则绘制多边形。 |
QPaintEngine::WindingMode | 1 | 应该使用环绕填充规则绘制多边形。 |
QPaintEngine::ConvexMode | 2 | 多边形是凸多边形,可以使用可用的专用算法进行绘制。 |
QPaintEngine::PolylineMode | 3 | 仅绘制多边形的轮廓。 |
枚举 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 | Qt for Embedded Linux |
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的引擎 |
成员函数文档
[显式]
QPaintEngine::QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())
创建一个具有由caps指定的特性集的绘画引擎。
[虚拟 noexcept]
QPaintEngine::~QPaintEngine()
销毁绘画引擎。
[纯虚]
bool QPaintEngine::begin(QPaintDevice *pdev)
重新实现此函数以在要开始在绘画设备pdev上绘制时初始化您的绘画引擎。如果初始化成功则返回true;否则返回false。
[虚拟]
void QPaintEngine::drawEllipse(const QRectF &rect)
重新实现此函数以绘制可以包含在矩形rect内的最大椭圆。
默认实现调用drawPolygon。
[虚拟]
void QPaintEngine::drawEllipse(const QRect &rect)
此函数的默认实现调用此函数的浮点版本。
[虚拟]
void QPaintEngine::drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor)
重新实现此函数以使用给定的转换标志flags,将image指定的sr矩形部分绘制到给定的rectangle中,以将其转换为像素地图。
[虚拟]
void QPaintEngine::drawLines(const QLineF *lines, int lineCount)
默认实现将lines列表中的线条分割成lineCount个独立的调用drawPath() 或 drawPolygon(),具体取决于绘画引擎的特性集。
[虚拟]
void QPaintEngine::drawLines(const QLine *lines, int lineCount)
这是一个重载函数。
默认实现将lines中的前lineCount行转换为QLineF,并调用此函数的浮点版本。
[虚函数]
`void` QPaintEngine::drawPath(const `QPainterPath` &path)
默认实现忽略path,什么也不做。
[纯虚函数]
`void` QPaintEngine::drawPixmap(const `QRectF` &r, const `QPixmap` &pm, const `QRectF` &sr)
重新实现此函数以在给定r中绘制由sr矩形指定的pm的部分。
[虚函数]
`void` QPaintEngine::drawPoints(const `QPointF` *points, `int` pointCount)
在缓冲区points中绘制前pointCount个点。
[虚函数]
`void` QPaintEngine::drawPoints(const `QPoint` *points, `int` pointCount)
在缓冲区points中绘制前pointCount个点。
默认实现将points中的前pointCount QPoints 转换为QPointF,并调用drawPoints的浮点版本。
[虚函数]
`void` QPaintEngine::drawPolygon(const `QPointF` *points, `int` pointCount, `QPaintEngine::PolygonDrawMode` mode)
重新实现此虚拟函数,使用mode模式绘制由points中的前pointCount个点定义的多边形。
注意:至少必须重新实现drawPolygon()函数中的一个。
[虚函数]
`void` QPaintEngine::drawPolygon(const `QPoint` *points, `int` pointCount, `QPaintEngine::PolygonDrawMode` mode)
这是一个重载函数。
重新实现此虚拟函数,使用mode模式绘制由points中的前pointCount个点定义的多边形。
注意:至少必须重新实现drawPolygon()函数中的一个。
[虚函数]
`void` QPaintEngine::drawRects(const `QRectF` *rects, `int` rectCount)
绘制缓冲区rects中的前rectCount个矩形。此函数的默认实现根据绘图引擎的特性集调用drawPath()或drawPolygon()。
[虚函数]
`void` QPaintEngine::drawRects(const `QRect` *rects, `int` rectCount)
这是一个重载函数。
默认实现将缓冲区rects中的前rectCount个矩形转换为QRectF,并调用此函数的浮点版本。
[虚函数]
`void` QPaintEngine::drawTextItem(const `QPointF` &p, const `QTextItem` &textItem)
此函数在位置 p 绘制文本项 textItem。此函数的默认实现将文本转换为 QPainterPath 并绘制结果路径。
[虚拟]
void QPaintEngine::drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p)
重新实现此函数以在给定的 rect 中绘制 pixmap,从给定的 p 开始。将重复绘制 pixmap,直到 rect 被填满。
[纯虚]
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()。
[纯虚]
QPaintEngine::Type QPaintEngine::type() const
重新实现此函数以返回绘图引擎的 Type。
[纯虚]
void QPaintEngine::updateState(const QPaintEngineState &state)
重新实现此函数以更新绘图引擎的状态。
当实现该函数时,负责检查绘图引擎当前的 state 并更新已更改的属性。使用 QPaintEngineState::state() 函数找出必须更新的属性,然后使用相应的 获取函数 获取给定属性的当前值。
© 2024 Qt公司有限公司。本文档中包含的文档贡献为其各自所有者的版权。本提供的文档是在自由软件基金会发布的GNU自由文档许可证版本1.3的条款下授权的。Qt及其相关标志是芬兰及世界其他国家的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。