QPaintEngine Class

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

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

公共类型

enum DirtyFlag { DirtyPen, DirtyBrush, DirtyBrushOrigin, DirtyFont, ..., AllDirty }
flags DirtyFlags
enum PaintEngineFeature { AlphaBlend, Antialiasing, BlendModes, BrushStroke, ..., AllFeatures }
flags PaintEngineFeatures
enum PolygonDrawMode { OddEvenMode, WindingMode, ConvexMode, PolylineMode }
enum Type { X11, Windows, MacPrinter, CoreGraphics, ..., 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

Protected Variables

uint active
QScopedPointer<QPaintEnginePrivate> d_ptr
uint extended
QPaintEngine::PaintEngineFeatures gccaps
uint selfDestruct
QPaintEngineState * state

详细描述

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

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 QGLWidget) 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.

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

成员类型文档编制

enum QPaintEngine:: DirtyFlag
flags QPaintEngine:: DirtyFlags

常量 描述
QPaintEngine::DirtyPen 0x0001 The pen is dirty and needs to be updated.
QPaintEngine::DirtyBrush 0x0002 The brush is dirty and needs to be updated.
QPaintEngine::DirtyBrushOrigin 0x0004 The brush origin is dirty and needs to updated.
QPaintEngine::DirtyFont 0x0008 The font is dirty and needs to be updated.
QPaintEngine::DirtyBackground 0x0010 The background is dirty and needs to be updated.
QPaintEngine::DirtyBackgroundMode 0x0020 The background mode is dirty and needs to be updated.
QPaintEngine::DirtyTransform 0x0040 The transform is dirty and needs to be updated.
QPaintEngine::DirtyClipRegion 0x0080 The clip region is dirty and needs to be updated.
QPaintEngine::DirtyClipPath 0x0100 The clip path is dirty and needs to be updated.
QPaintEngine::DirtyHints 0x0200 The render hints is dirty and needs to be updated.
QPaintEngine::DirtyCompositionMode 0x0400 The composition mode is dirty and needs to be updated.
QPaintEngine::DirtyClipEnabled 0x0800 Whether clipping is enabled or not is dirty and needs to be updated.
QPaintEngine::DirtyOpacity 0x1000 The constant opacity has changed and needs to be updated as part of the state change in QPaintEngine::updateState ().
QPaintEngine::AllDirty 0xffff Convenience enum used internally.

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

A paint engine must update every dirty state.

The DirtyFlags type is a typedef for QFlags <DirtyFlag>. It stores an OR combination of DirtyFlag values.

enum QPaintEngine:: PaintEngineFeature
flags QPaintEngine:: PaintEngineFeatures

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.

常量 描述
QPaintEngine::AlphaBlend 0x00000080 The engine can alpha blend primitives.
QPaintEngine::Antialiasing 0x00000400 The engine can use antialising to improve the appearance of rendered primitives.
QPaintEngine::BlendModes 0x00008000 The engine supports blending modes.
QPaintEngine::BrushStroke 0x00000800 The engine supports drawing strokes that contain brushes as fills, not just solid colors (e.g. a dashed gradient line of width 2).
QPaintEngine::ConicalGradientFill 0x00000040 The engine supports conical gradient fills.
QPaintEngine::ConstantOpacity 0x00001000 The engine supports the feature provided by QPainter::setOpacity ().
QPaintEngine::LinearGradientFill 0x00000010 The engine supports linear gradient fills.
QPaintEngine::MaskedBrush 0x00002000 The engine is capable of rendering brushes that has a texture with an alpha channel or a mask.
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 The engine has path support.
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.

The PaintEngineFeatures type is a typedef for QFlags <PaintEngineFeature>. It stores an OR combination of PaintEngineFeature values.

enum QPaintEngine:: PolygonDrawMode

常量 描述
QPaintEngine::OddEvenMode 0 The polygon should be drawn using OddEven fill rule.
QPaintEngine::WindingMode 1 The polygon should be drawn using Winding fill rule.
QPaintEngine::ConvexMode 2 The polygon is a convex polygon and can be drawn using specialized algorithms where available.
QPaintEngine::PolylineMode 3 Only the outline of the polygon should be drawn.

enum QPaintEngine:: Type

常量 描述
QPaintEngine::X11 0
QPaintEngine::Windows 1
QPaintEngine::MacPrinter 4
QPaintEngine::CoreGraphics 3 macOS 's Quartz2D (CoreGraphics)
QPaintEngine::QuickDraw 2 macOS 's QuickDraw
QPaintEngine::QWindowSystem 5 Qt for Embedded Linux
QPaintEngine::PostScript 6 (No longer supported)
QPaintEngine::OpenGL 7
QPaintEngine::Picture 8 QPicture format
QPaintEngine::SVG 9 Scalable Vector Graphics XML format
QPaintEngine::Raster 10
QPaintEngine::Direct3D 11 Windows only, Direct3D based engine
QPaintEngine::Pdf 12 Portable Document Format
QPaintEngine::OpenVG 13
QPaintEngine::User 50 First user type ID
QPaintEngine::MaxUser 100 Last user type ID
QPaintEngine::OpenGL2 14
QPaintEngine::PaintBuffer 15
QPaintEngine::Blitter 16
QPaintEngine::Direct2D 17 Windows only, Direct2D based engine

成员函数文档编制

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

Creates a paint engine with the featureset specified by caps .

[virtual] QPaintEngine:: ~QPaintEngine ()

Destroys the paint engine.

[pure virtual] bool QPaintEngine:: begin ( QPaintDevice * pdev )

Reimplement this function to initialise your paint engine when painting is to start on the paint device pdev . Return true if the initialization was successful; otherwise return false.

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

[virtual] void QPaintEngine:: drawEllipse (const QRectF & rect )

Reimplement this function to draw the largest ellipse that can be contained within rectangle rect .

默认实现调用 drawPolygon ().

[virtual] void QPaintEngine:: drawEllipse (const QRect & rect )

The default implementation of this function calls the floating point version of this function

[virtual] void QPaintEngine:: drawImage (const QRectF & rectangle , const QImage & image , const QRectF & sr , Qt::ImageConversionFlags flags = Qt::AutoColor)

Reimplement this function to draw the part of the image specified by the sr rectangle in the given rectangle using the given conversion flags flags , to convert it to a pixmap.

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

The default implementation splits the list of lines in lines into lineCount separate calls to drawPath () 或 drawPolygon () depending on the feature set of the paint engine.

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

这是重载函数。

The default implementation converts the first lineCount lines in lines to a QLineF and calls the floating point version of this function.

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

The default implementation ignores the path and does nothing.

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

Reimplement this function to draw the part of the pm specified by the sr rectangle in the given r .

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

Draws the first pointCount points in the buffer points

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

Draws the first pointCount points in the buffer points

The default implementation converts the first pointCount QPoints in points to QPointFs and calls the floating point version of drawPoints .

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

Reimplement this virtual function to draw the polygon defined by the pointCount first points in points , using mode mode .

注意: At least one of the drawPolygon() functions must be reimplemented.

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

这是重载函数。

Reimplement this virtual function to draw the polygon defined by the pointCount first points in points , using mode mode .

注意: At least one of the drawPolygon () functions must be reimplemented.

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

Draws the first rectCount rectangles in the buffer rects . The default implementation of this function calls drawPath () 或 drawPolygon () depending on the feature set of the paint engine.

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

这是重载函数。

The default implementation converts the first rectCount rectangles in the buffer rects to a QRectF and calls the floating point version of this function.

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

This function draws the text item textItem 在位置 p . The default implementation of this function converts the text to a QPainterPath and paints the resulting path.

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

Reimplement this function to draw the pixmap in the given rect , starting at the given p . The pixmap will be drawn repeatedly until the rect is filled.

[pure virtual] bool QPaintEngine:: end ()

Reimplement this function to finish painting on the current paint device. Return true if painting was finished successfully; otherwise return false.

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

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

返回 true if the paint engine supports the specified feature ;否则返回 false .

bool QPaintEngine:: isActive () const

返回 true if the paint engine is actively drawing; otherwise returns 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

Returns the paint engine's painter.

void QPaintEngine:: setActive ( bool state )

Sets the active state of the paint engine to state .

另请参阅 isActive ().

[pure virtual] QPaintEngine::Type QPaintEngine:: type () const

Reimplement this function to return the paint engine Type .

[pure virtual] void QPaintEngine:: updateState (const QPaintEngineState & state )

Reimplement this function to update the state of a paint engine.

When implemented, this function is responsible for checking the paint engine's current state and update the properties that are changed. Use the QPaintEngineState::state () function to find out which properties that must be updated, then use the corresponding get function to retrieve the current values for the given properties.

另请参阅 QPaintEngineState .