QPaintEngine Class

The QPaintEngine class provides an abstract definition of how QPainter draws to a given device on a given platform. More...

Header: #include <QPaintEngine>
qmake: QT += gui

Public Types

enum DirtyFlag { DirtyPen, DirtyBrush, DirtyBrushOrigin, DirtyFont, DirtyBackground, …, AllDirty }
enum PaintEngineFeature { AlphaBlend, Antialiasing, BlendModes, BrushStroke, ConicalGradientFill, …, AllFeatures }
enum PolygonDrawMode { OddEvenMode, WindingMode, ConvexMode, PolylineMode }
enum Type { X11, Windows, MacPrinter, CoreGraphics, QuickDraw, …, Direct2D }

Detailed Description

Qt provides several premade implementations of QPaintEngine for the different painter backends we support. The primary paint engine provided is the raster paint engine, which contains a software rasterizer which supports the full feature set on all supported platforms. This is the default for painting on QWidget-based classes in e.g. on Windows, X11 and macOS, it is the backend for painting on QImage and it is used as a fallback for paint engines that do not support a certain capability. In addition we provide QPaintEngine implementations for OpenGL (accessible through QOpenGLWidget) and printing (which allows using QPainter to draw on a QPrinter object).

If one wants to use QPainter to draw to a different backend, one must subclass QPaintEngine and reimplement all its virtual functions. The QPaintEngine implementation is then made available by subclassing QPaintDevice and reimplementing the virtual function QPaintDevice::paintEngine().

QPaintEngine is created and owned by the QPaintDevice that created it.

See also QPainter, QPaintDevice::paintEngine(), and Paint System.

Member Type Documentation

enum QPaintEngine::DirtyFlag

ConstantValueDescription
QPaintEngine::DirtyPen0x0001The pen is dirty and needs to be updated.
QPaintEngine::DirtyBrush0x0002The brush is dirty and needs to be updated.
QPaintEngine::DirtyBrushOrigin0x0004The brush origin is dirty and needs to updated.
QPaintEngine::DirtyFont0x0008The font is dirty and needs to be updated.
QPaintEngine::DirtyBackground0x0010The background is dirty and needs to be updated.
QPaintEngine::DirtyBackgroundMode0x0020The background mode is dirty and needs to be updated.
QPaintEngine::DirtyTransform0x0040The transform is dirty and needs to be updated.
QPaintEngine::DirtyClipRegion0x0080The clip region is dirty and needs to be updated.
QPaintEngine::DirtyClipPath0x0100The clip path is dirty and needs to be updated.
QPaintEngine::DirtyHints0x0200The render hints is dirty and needs to be updated.
QPaintEngine::DirtyCompositionMode0x0400The composition mode is dirty and needs to be updated.
QPaintEngine::DirtyClipEnabled0x0800Whether clipping is enabled or not is dirty and needs to be updated.
QPaintEngine::DirtyOpacity0x1000The constant opacity has changed and needs to be updated as part of the state change in QPaintEngine::updateState().
QPaintEngine::AllDirty0xffffConvenience enum used internally.

These types are used by QPainter to trigger lazy updates of the various states in the QPaintEngine using QPaintEngine::updateState().

A paint engine must update every dirty state.

enum QPaintEngine::PaintEngineFeature

This enum is used to describe the features or capabilities that the paint engine has. If a feature is not supported by the engine, QPainter will do a best effort to emulate that feature through other means and pass on an alpha blended QImage to the engine with the emulated results. Some features cannot be emulated: AlphaBlend and PorterDuff.

ConstantValueDescription
QPaintEngine::AlphaBlend0x00000080The engine can alpha blend primitives.
QPaintEngine::Antialiasing0x00000400The engine can use antialising to improve the appearance of rendered primitives.
QPaintEngine::BlendModes0x00008000The engine supports blending modes.
QPaintEngine::BrushStroke0x00000800The engine supports drawing strokes that contain brushes as fills, not just solid colors (e.g. a dashed gradient line of width 2).
QPaintEngine::ConicalGradientFill0x00000040The engine supports conical gradient fills.
QPaintEngine::ConstantOpacity0x00001000The engine supports the feature provided by QPainter::setOpacity().
QPaintEngine::LinearGradientFill0x00000010The engine supports linear gradient fills.
QPaintEngine::MaskedBrush0x00002000The engine is capable of rendering brushes that has a texture with an alpha channel or a mask.
QPaintEngine::ObjectBoundingModeGradients0x00010000The 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::PainterPaths0x00000200The engine has path support.
QPaintEngine::PaintOutsidePaintEvent0x20000000The engine is capable of painting outside of paint events.
QPaintEngine::PatternBrush0x00000008The engine is capable of rendering brushes with the brush patterns specified in Qt::BrushStyle.
QPaintEngine::PatternTransform0x00000002The engine has support for transforming brush patterns.
QPaintEngine::PerspectiveTransform0x00004000The engine has support for performing perspective transformations on primitives.
QPaintEngine::PixmapTransform0x00000004The engine can transform pixmaps, including rotation and shearing.
QPaintEngine::PorterDuff0x00000100The engine supports Porter-Duff operations
QPaintEngine::PrimitiveTransform0x00000001The engine has support for transforming drawing primitives.
QPaintEngine::RadialGradientFill0x00000020The engine supports radial gradient fills.
QPaintEngine::RasterOpModes0x00020000The engine supports bitwise raster operations.
QPaintEngine::AllFeatures0xffffffffAll of the above features. This enum value is usually used as a bit mask.

enum QPaintEngine::PolygonDrawMode

ConstantValueDescription
QPaintEngine::OddEvenMode0The polygon should be drawn using OddEven fill rule.
QPaintEngine::WindingMode1The polygon should be drawn using Winding fill rule.
QPaintEngine::ConvexMode2The polygon is a convex polygon and can be drawn using specialized algorithms where available.
QPaintEngine::PolylineMode3Only the outline of the polygon should be drawn.

enum QPaintEngine::Type

ConstantValueDescription
QPaintEngine::X110 
QPaintEngine::Windows1 
QPaintEngine::MacPrinter4 
QPaintEngine::CoreGraphics3macOS's Quartz2D (CoreGraphics)
QPaintEngine::QuickDraw2macOS's QuickDraw
QPaintEngine::QWindowSystem5Qt for Embedded Linux
QPaintEngine::PostScript6(No longer supported)
QPaintEngine::OpenGL7 
QPaintEngine::Picture8QPicture format
QPaintEngine::SVG9Scalable Vector Graphics XML format
QPaintEngine::Raster10 
QPaintEngine::Direct3D11Windows only, Direct3D based engine
QPaintEngine::Pdf12Portable Document Format
QPaintEngine::OpenVG13 
QPaintEngine::User50First user type ID
QPaintEngine::MaxUser100Last user type ID
QPaintEngine::OpenGL214 
QPaintEngine::PaintBuffer15 
QPaintEngine::Blitter16 
QPaintEngine::Direct2D17Windows only, Direct2D based engine