绘画系统(05):【类】QPaintEngine[官翻]

QPaintEngine 类

QPaintEngine类提供了有关QPainter如何绘制到给定平台上给定设备的抽象定义。

Header#include < QPaintEngine >
qmakeQT += gui
Inherited By

详述

Qt为我们支持的不同painter后端提供了QPaintEngine的几种预制实现。提供的主要绘制引擎是光栅绘制引擎,它包含一个软件光栅化程序,该光栅化程序支持所有受支持平台上的全部功能集。这是例如在基于QWidget的类上绘画的默认设置。在Windows,X11和macOS上,它是QImage绘画的后端,并且用作不支持某些功能的绘画引擎的后备。此外,我们为OpenGL(可通过QOpenGLWidget访问)和打印(允许使用QPainter绘制QPrinter对象)提供QPaintEngine实现。

如果要使用QPainter绘制到另一后端,则必须继承QPaintEngine的子类并重新实现其所有虚拟功能。然后,通过子类化QPaintDevice并重新实现虚拟函数QPaintDevice :: paintEngine() ,可以使用QPaintEngine实现。

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

另请参见QPainter,QPaintDevice :: paintEngine() 和Paint System。

公共类型

enum DirtyFlag

flags DirtyFlags

ConstantValueDescription
DirtyPen0x0001笔很脏,需要更新。
DirtyBrush0x0002刷子很脏,需要更新。
DirtyBrushOrigin0x0004笔刷原点很脏,需要更新。
DirtyFont0x0008字体变脏,需要更新。
DirtyBackground0x0010背景很脏,需要更新。
DirtyBackgroundMode0x0020后台模式很脏,需要更新。
DirtyTransform0x0040转换很脏,需要更新。
DirtyClipRegion0x0080剪辑区域很脏,需要更新。
DirtyClipPath0x0100剪辑路径很脏,需要更新。
DirtyHints0x0200渲染提示很脏,需要更新。
DirtyCompositionMode0x0400合成模式很脏,需要更新。
DirtyClipEnabled0x0800是否启用裁剪是肮脏的,需要更新。
DirtyOpacity0x1000恒定的不透明度已更改,需要作为QPaintEngine :: updateState() 中状态更改的一部分进行更新。
AllDirty0xffff内部使用的方便枚举。

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

绘制引擎必须更新每个脏状态。

enum PaintEngineFeature

flags PaintEngineFeatures

该枚举用于描述绘画引擎具有的功能。 如果引擎不支持某个功能,则QPainter将尽最大努力通过其他方式来仿真该功能,并将具有alpha混合效果的QImage传递给引擎,并提供仿真结果。 某些功能无法仿真:AlphaBlend和PorterDuff。

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

enum PolygonDrawMode

ConstantValueDescription
OddEvenMode0多边形应使用OddEven填充规则绘制。
WindingMode1多边形应使用绕线填充规则绘制。
ConvexMode2多边形是凸多边形,可以使用可用的专用算法进行绘制。
PolylineMode3仅应绘制多边形的轮廓。

enum Type

ConstantValueDescription
X110
Windows1
QuickDraw2macOS的QuickDraw
CoreGraphics3macOS的Quartz2D(CoreGraphics)
MacPrinter4
QWindowSystem5嵌入式Linux的Qt
PostScript6(不再支持)
OpenGL7
Picture8QPicture格式
SVG9可伸缩矢量图形XML格式
Raster10
Direct3D11仅Windows,基于Direct3D的引擎
Pdf12便携式文件格式
OpenVG13
OpenGL214
PaintBuffer15
Blitter16
Direct2D17仅Windows,基于Direct2D的引擎
User50第一用户类型ID
MaxUser100上次用户类型ID

公共函数

  1. QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())
  2. virtual ~QPaintEngine()
  3. virtual bool begin(QPaintDevice *pdev) = 0
  4. virtual bool end() = 0
  5. virtual void drawEllipse(…)
  6. virtual void drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor)
  7. virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0
  8. virtual void drawTiledPixmap(const QRectF &rect, const QPixmap &pixmap, const QPointF &p)
  9. virtual void drawLines(…)
  10. virtual void drawPath(const QPainterPath &path)
  11. virtual void drawPoints(…)
  12. virtual void drawPolygon(…)
  13. virtual void drawRects(…)
  14. virtual void drawTextItem(const QPointF &p, const QTextItem &textItem)
  15. bool hasFeature(QPaintEngine::PaintEngineFeatures feature) const
  16. bool isActive() const
  17. void setActive(bool state)
  18. virtual void updateState(const QPaintEngineState &state) = 0
  19. QPaintDevice * paintDevice() const
  20. QPainter * painter() const
  21. virtual QPaintEngine::Type type() const = 0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值