QPaintEngine 类

QPaintEngine 类提供抽象定义为如何 QPainter 绘制到给定设备在给定平台。 更多...

头: #include <QPaintEngine>
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 QPointF * points , int pointCount )
virtual void drawPoints (const QPoint * 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 且它被用作不支持某些能力的绘制引擎的回退。此外,还提供 QPaintEngine 实现为 OpenGL (可访问透过 QOpenGLWidget ) 和打印 (允许使用 QPainter 绘制在 QPrinter 对象)。

若想要使用 QPainter 绘制到不同后端,必须子类 QPaintEngine 并重实现其所有虚函数。QPaintEngine 实现然后就可用了通过子类化 QPaintDevice 并重实现虚函数 QPaintDevice::paintEngine ().

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

另请参阅 QPainter , QPaintDevice::paintEngine (),和 描绘系统 .

成员类型文档编制

enum 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 使用 QPaintEngine::updateState ().

描绘引擎必须更新每脏点状态。

DirtyFlags 类型是 typedef 对于 QFlags <DirtyFlag>。它存储 DirtyFlag 值的 OR 组合。

enum 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 The engine has native support for gradients with coordinate mode QGradient::ObjectBoundingMode . Otherwise, if QPaintEngine::PatternTransform is supported, object bounding mode gradients are converted to gradients with coordinate mode QGradient::LogicalMode and a brush transform for the coordinate mapping.
QPaintEngine::PainterPaths 0x00000200 引擎有路径支持。
QPaintEngine::PaintOutsidePaintEvent 0x20000000 The engine is capable of painting outside of paint events.
QPaintEngine::PatternBrush 0x00000008 The engine is capable of rendering brushes with the brush patterns specified in Qt::BrushStyle .
QPaintEngine::PatternTransform 0x00000002 The engine has support for transforming brush patterns.
QPaintEngine::PerspectiveTransform 0x00004000 The engine has support for performing perspective transformations on primitives.
QPaintEngine::PixmapTransform 0x00000004 The engine can transform pixmaps, including rotation and shearing.
QPaintEngine::PorterDuff 0x00000100 The engine supports Porter-Duff operations
QPaintEngine::PrimitiveTransform 0x00000001 The engine has support for transforming drawing primitives.
QPaintEngine::RadialGradientFill 0x00000020 The engine supports radial gradient fills.
QPaintEngine::RasterOpModes 0x00020000 The engine supports bitwise raster operations.
QPaintEngine::AllFeatures 0xffffffff All of the above features. This enum value is usually used as a bit mask.

PaintEngineFeatures 类型是 typedef 对于 QFlags <PaintEngineFeature>。它存储 PaintEngineFeature 值的 OR 组合。

enum QPaintEngine:: PolygonDrawMode

常量 描述
QPaintEngine::OddEvenMode 0 应使用 OddEven (奇偶) 填充规则绘制多边形。
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 Qt for Embedded Linux
QPaintEngine::PostScript 6 (不再支持)
QPaintEngine::OpenGL 7
QPaintEngine::Picture 8 QPicture format
QPaintEngine::SVG 9 SVG (可伸缩向量图形) XML 格式
QPaintEngine::Raster 10
QPaintEngine::Direct3D 11 仅 Windows,基于 Direct3D 的引擎
QPaintEngine::Pdf 12 PDF (便携式文档格式)
QPaintEngine::OpenVG 13
QPaintEngine::User 50 第一用户类型 ID
QPaintEngine::MaxUser 100 最后用户类型 ID
QPaintEngine::OpenGL2 14
QPaintEngine::PaintBuffer 15
QPaintEngine::Blitter 16
QPaintEngine::Direct2D 17 仅 Windows,基于 Direct2D 的引擎

成员函数文档编制

QPaintEngine:: QPaintEngine ( QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())

创建描绘引擎采用的特征集指定通过 caps .

[虚拟] QPaintEngine:: ~QPaintEngine ()

销毁描绘引擎。

[pure virtual] 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)

重实现此函数以绘制部分 image 指定通过 sr 矩形在给定 rectangle 使用给定转换标志 flags ,以将它转换成像素图。

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

默认实现拆分线条列表在 lines into lineCount 单独调用 drawPath () 或 drawPolygon () 从属描绘引擎的特征集。

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

这是重载函数。

默认实现转换第一 lineCount 线条在 lines QLineF 并调用此函数的浮点版本。

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

默认实现忽略 path 且什么都不做。

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

重实现此函数以绘制部分 pm 指定通过 sr 矩形在给定 r .

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

绘制第一 pointCount 点在缓冲 points

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

绘制第一 pointCount 点在缓冲 points

默认实现转换第一 pointCount QPoints 在 points to QPointFs and calls the floating point version of drawPoints.

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

重实现此虚函数以绘制多边形定义通过 pointCount 第一点在 points ,使用模式 mode .

注意: 至少某一 drawPolygon() 函数必须被重实现。

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

这是重载函数。

重实现此虚函数以绘制多边形定义通过 pointCount 第一点在 points ,使用模式 mode .

注意: 至少某一 drawPolygon() 函数必须被重实现。

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

绘制第一 rectCount 矩形在缓冲 rects 。此函数的默认实现调用 drawPath () 或 drawPolygon () 从属描绘引擎的特征集。

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

这是重载函数。

默认实现转换第一 rectCount 矩形在缓冲 rects QRectF 并调用此函数的浮点版本。

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

此函数绘制文本项 textItem 在位置 p 。此函数的默认实现将文本转换成 QPainterPath 并描绘结果路径。

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

重实现此函数以绘制 pixmap 以给定 rect ,起始于给定 p 。将重复绘制像素图直到 rect 被填充。

[pure virtual] bool QPaintEngine:: end ()

重实现此函数以完成当前描绘设备中的描绘。返回 true 若描绘成功完成;否则返回 false。

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

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

返回 true 若描绘引擎支持指定 feature ;否则返回 false .

bool QPaintEngine:: isActive () const

返回 true 若描绘引擎的绘制是活动的;否则返回 false .

另请参阅 setActive ().

QPaintDevice *QPaintEngine:: paintDevice () const

Returns the device that this engine is painting on, if painting is active; otherwise returns 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 .