QPaintEngine 类

QPaintEngine 类提供了一个在特定平台上的特定设备上如何绘制 QPainter 的抽象定义。更多...

头文件 #include <QPaintEngine>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

公共类型

枚举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()
虚拟 boolbegin(QPaintDevice *pdev) = 0
虚拟 voiddrawEllipse(const QRectF &rect)
虚拟 voiddrawEllipse(const QRect &rect)
虚拟 voiddrawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor)
虚拟 voiddrawLines(const QLineF *lines, int lineCount)
虚拟 voiddrawLines(const QLine *lines, int lineCount)
虚拟 voiddrawPath(const QPainterPath &path)
虚拟 voiddrawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0
虚拟 voiddrawPoints(const QPointF *points, int pointCount)
虚拟 voiddrawPoints(const QPoint *points, int pointCount)
虚拟 voiddrawPolygon(const QPointF *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
虚拟 voiddrawPolygon(const QPoint *points, int pointCount, QPaintEngine::PolygonDrawMode mode)
虚拟 voiddrawRects(const QRectF *rects, int rectCount)
虚拟 voiddrawRects(const QRect *rects, int rectCount)
虚拟 voiddrawTextItem(const QPointF &p, const QTextItem &textItem)
虚拟 voiddrawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p)
虚拟 boolend() = 0
boolhasFeature(QPaintEngine::PaintEngineFeatures feature) const
boolisActive() const
QPaintDevice *paintDevice() const
QPainter *painter() const
voidsetActive(bool state)
virtual QPaintEngine::Typetype() const = 0
虚拟 voidupdateState(const QPaintEngineState &state) = 0

详细描述

Qt 为我们支持的各个画家后端提供了几个 QPaintEngine 的预制实现。主要提供的绘画引擎是光栅化的绘画引擎,它包含一个软件光栅器,支持所有平台上的完整功能集。这是在 Windows、X11 和 macOS 等基于 QWidget 类的绘画默认设置,它是 QImage 绘画的支撑后端,也可用作不支持某些功能的其他绘画引擎的回退选择。此外,我们还提供了针对 OpenGL (通过 QOpenGLWidget 访问) 和打印(允许使用 QPainter 在 QPrinter 对象上绘制) 的 QPaintEngine 实现。

如果想让 QPainter 绘制到不同的后端,必须派生 QPaintEngine 类并重写所有虚函数。通过派生 QPaintDevice 类并重写虚函数 QPaintDevice::paintEngine() 来使 QPaintEngine 实现可供使用。

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

另请参阅 QPainterQPaintDevice::paintEngine() 以及 绘制系统

成员类型文档

枚举 QPaintEngine::DirtyFlag
标志 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 的 typedef。它存储了 DirtyFlag 值的 OR 组合。

枚举 QPaintEngine::PaintEngineFeature
标志 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该引擎能够处理 paint 事件以外的绘制。
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> 的类型别名。它存储了 PaintEngineFeature 值的逻辑或组合。

枚举 QPaintEngine::PolygonDrawMode

常量描述
QPaintEngine::OddEvenMode0应该使用奇偶填充规则绘制多边形。
QPaintEngine::WindingMode1应该使用环绕填充规则绘制多边形。
QPaintEngine::ConvexMode2多边形是凸多边形,可以使用可用的专用算法进行绘制。
QPaintEngine::PolylineMode3仅绘制多边形的轮廓。

枚举 QPaintEngine::Type

常量描述
QPaintEngine::X110 
QPaintEngine::Windows1 
QPaintEngine::MacPrinter4 
QPaintEngine::CoreGraphics3macOS 的 Quartz2D (CoreGraphics)
QPaintEngine::QuickDraw2macOS的QuickDraw
QPaintEngine::QWindowSystem5Qt for Embedded Linux
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的引擎

成员函数文档

[显式] QPaintEngine::QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())

创建一个具有由caps指定的特性集的绘画引擎。

[虚拟 noexcept] QPaintEngine::~QPaintEngine()

销毁绘画引擎。

[纯虚] bool QPaintEngine::begin(QPaintDevice *pdev)

重新实现此函数以在要开始在绘画设备pdev上绘制时初始化您的绘画引擎。如果初始化成功则返回true;否则返回false。

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

[虚拟] 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。

参阅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()。

[纯虚] QPaintEngine::Type QPaintEngine::type() const

重新实现此函数以返回绘图引擎的 Type

[纯虚] void QPaintEngine::updateState(const QPaintEngineState &state)

重新实现此函数以更新绘图引擎的状态。

当实现该函数时,负责检查绘图引擎当前的 state 并更新已更改的属性。使用 QPaintEngineState::state() 函数找出必须更新的属性,然后使用相应的 获取函数 获取给定属性的当前值。

参阅QPaintEngineState

© 2024 Qt公司有限公司。本文档中包含的文档贡献为其各自所有者的版权。本提供的文档是在自由软件基金会发布的GNU自由文档许可证版本1.3的条款下授权的。Qt及其相关标志是芬兰及世界其他国家的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。