QPaintEngine Class

Die Klasse QPaintEngine bietet eine abstrakte Definition, wie QPainter auf einem bestimmten Gerät und einer bestimmten Plattform zeichnet. Mehr...

Kopfzeile: #include <QPaintEngine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

Öffentliche Typen

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 }

Öffentliche Funktionen

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 QPoint *points, int pointCount)
virtual void drawPoints(const QPointF *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

Detaillierte Beschreibung

Qt bietet mehrere vorgefertigte Implementierungen von QPaintEngine für die verschiedenen von uns unterstützten Maler-Backends. Die primäre Mal-Engine ist die Raster-Paint-Engine, die einen Software-Rasterizer enthält, der den vollen Funktionsumfang auf allen unterstützten Plattformen unterstützt. Dies ist der Standard für das Malen auf QWidget-basierten Klassen in z.B. Windows, X11 und macOS, es ist das Backend für das Malen auf QImage und es wird als Fallback für Paint-Engines verwendet, die eine bestimmte Fähigkeit nicht unterstützen. Darüber hinaus bieten wir QPaintEngine-Implementierungen für OpenGL (zugänglich über QOpenGLWidget) und Drucken (was die Verwendung von QPainter zum Zeichnen auf einem QPrinter Objekt ermöglicht).

Wenn man QPainter verwenden möchte, um auf ein anderes Backend zu zeichnen, muss man QPaintEngine unterklassifizieren und alle seine virtuellen Funktionen neu implementieren. Die QPaintEngine-Implementierung wird dann durch Unterklassifizierung von QPaintDevice und Neuimplementierung der virtuellen Funktion QPaintDevice::paintEngine() verfügbar gemacht.

QPaintEngine wird erstellt und gehört der QPaintDevice, die sie erstellt hat.

Siehe auch QPainter, QPaintDevice::paintEngine(), und Paint System.

Dokumentation der Mitgliedstypen

enum QPaintEngine::DirtyFlag
flags QPaintEngine::DirtyFlags

KonstanteWertBeschreibung
QPaintEngine::DirtyPen0x0001Der Stift ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyBrush0x0002Der Pinsel ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyBrushOrigin0x0004Der Pinselursprung ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyFont0x0008Die Schrift ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyBackground0x0010Der Hintergrund ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyBackgroundMode0x0020Der Hintergrundmodus ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyTransform0x0040Die Transformation ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyClipRegion0x0080Der Clipbereich ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyClipPath0x0100Der Clip-Pfad ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyHints0x0200Die Render-Hints sind verschmutzt und müssen aktualisiert werden.
QPaintEngine::DirtyCompositionMode0x0400Der Kompositionsmodus ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyClipEnabled0x0800Die Angabe, ob Clipping aktiviert ist oder nicht, ist verschmutzt und muss aktualisiert werden.
QPaintEngine::DirtyOpacity0x1000Die konstante Deckkraft hat sich geändert und muss als Teil der Zustandsänderung in QPaintEngine::updateState() aktualisiert werden.
QPaintEngine::AllDirty0xffffIntern verwendetes Convenience-Enum.

Diese Typen werden von QPainter verwendet, um mit QPaintEngine::updateState() träge Aktualisierungen der verschiedenen Zustände in QPaintEngine auszulösen.

Eine Paint Engine muss jeden Dirty State aktualisieren.

Der Typ DirtyFlags ist ein Typedef für QFlags<DirtyFlag>. Er speichert eine ODER-Kombination von DirtyFlag-Werten.

enum QPaintEngine::PaintEngineFeature
flags QPaintEngine::PaintEngineFeatures

Diese Aufzählung wird verwendet, um die Eigenschaften oder Fähigkeiten zu beschreiben, die die Paint Engine besitzt. Wenn ein Feature von der Engine nicht unterstützt wird, wird QPainter versuchen, dieses Feature mit anderen Mitteln zu emulieren und ein Alpha-Blended QImage mit den emulierten Ergebnissen an die Engine weiterzugeben. Einige Funktionen können nicht emuliert werden: AlphaBlend und PorterDuff.

KonstanteWertBeschreibung
QPaintEngine::AlphaBlend0x00000080Die Engine kann Primitive mit Alpha-Blend überblenden.
QPaintEngine::Antialiasing0x00000400Die Engine kann Antialiasing verwenden, um das Aussehen von gerenderten Primitiven zu verbessern.
QPaintEngine::BlendModes0x00008000Die Engine unterstützt Überblendungsmodi.
QPaintEngine::BrushStroke0x00000800Die Engine unterstützt Striche, die Pinsel als Füllung enthalten, nicht nur Volltonfarben (z. B. eine gestrichelte Verlaufslinie der Breite 2).
QPaintEngine::ConicalGradientFill0x00000040Die Engine unterstützt konische Verlaufsfüllungen.
QPaintEngine::ConstantOpacity0x00001000Die Engine unterstützt die von QPainter::setOpacity() bereitgestellte Funktion.
QPaintEngine::LinearGradientFill0x00000010Die Engine unterstützt lineare Gradientenfüllungen.
QPaintEngine::MaskedBrush0x00002000Die Engine ist in der Lage, Pinsel zu rendern, die eine Textur mit einem Alphakanal oder einer Maske haben.
QPaintEngine::ObjectBoundingModeGradients0x00010000Die Engine hat native Unterstützung für Farbverläufe mit dem Koordinatenmodus QGradient::ObjectBoundingMode. Andernfalls, wenn QPaintEngine::PatternTransform unterstützt wird, werden Objekt-Bounding-Mode-Gradienten in Gradienten mit Koordinatenmodus QGradient::LogicalMode und eine Pinseltransformation für die Koordinatenzuordnung umgewandelt.
QPaintEngine::PainterPaths0x00000200Die Engine hat Pfadunterstützung.
QPaintEngine::PaintOutsidePaintEvent0x20000000Die Engine ist in der Lage, außerhalb von Malereignissen zu malen.
QPaintEngine::PatternBrush0x00000008Die Engine ist in der Lage, Pinsel mit den in Qt::BrushStyle angegebenen Pinselmustern zu rendern.
QPaintEngine::PatternTransform0x00000002Die Engine unterstützt das Transformieren von Pinselmustern.
QPaintEngine::PerspectiveTransform0x00004000Die Engine unterstützt die Durchführung perspektivischer Transformationen von Primitiven.
QPaintEngine::PixmapTransform0x00000004Die Engine kann Pixmaps transformieren, einschließlich Rotation und Scherung.
QPaintEngine::PorterDuff0x00000100Die Engine unterstützt Porter-Duff-Operationen
QPaintEngine::PrimitiveTransform0x00000001Die Engine unterstützt das Transformieren von Zeichnungsprimitiven.
QPaintEngine::RadialGradientFill0x00000020Die Engine unterstützt radiale Gradientenfüllungen.
QPaintEngine::RasterOpModes0x00020000Die Engine unterstützt bitweise Rasteroperationen.
QPaintEngine::AllFeatures0xffffffffAlle der oben genannten Eigenschaften. Dieser Enum-Wert wird normalerweise als Bitmaske verwendet.

Der Typ PaintEngineFeatures ist ein Typedef für QFlags<PaintEngineFeature>. Er speichert eine ODER-Kombination von PaintEngineFeature-Werten.

enum QPaintEngine::PolygonDrawMode

KonstanteWertBeschreibung
QPaintEngine::OddEvenMode0Das Polygon soll mit der Füllregel UngeradeGerade gezeichnet werden.
QPaintEngine::WindingMode1Das Polygon sollte mit der Füllregel Winding gezeichnet werden.
QPaintEngine::ConvexMode2Das Polygon ist ein konvexes Polygon und kann mit speziellen Algorithmen gezeichnet werden, sofern diese verfügbar sind.
QPaintEngine::PolylineMode3Es soll nur der Umriss des Polygons gezeichnet werden.

enum QPaintEngine::Type

KonstanteWertBeschreibung
QPaintEngine::X110
QPaintEngine::Windows1
QPaintEngine::MacPrinter4
QPaintEngine::CoreGraphics3Quartz2D von macOS (CoreGraphics)
QPaintEngine::QuickDraw2QuickDraw von macOS
QPaintEngine::QWindowSystem5Qt für eingebettetes Linux
QPaintEngine::OpenGL6
QPaintEngine::Picture7QPicture Format
QPaintEngine::SVG8Skalierbare Vektorgrafik im XML-Format
QPaintEngine::Raster9
QPaintEngine::Direct3D10Nur Windows, Direct3D-basierte Engine
QPaintEngine::Pdf11Tragbares Dokumentenformat
QPaintEngine::OpenVG12
QPaintEngine::User50Erste Benutzertyp-ID
QPaintEngine::MaxUser100ID des letzten Benutzertyps
QPaintEngine::OpenGL213
QPaintEngine::PaintBuffer14
QPaintEngine::Blitter15
QPaintEngine::Direct2D16Nur Windows, Direct2D-basierte Engine

Dokumentation der Mitgliedsfunktionen

[explicit] QPaintEngine::QPaintEngine(QPaintEngine::PaintEngineFeatures caps = PaintEngineFeatures())

Erzeugt eine Paint-Engine mit dem durch caps angegebenen Featureset.

[virtual noexcept] QPaintEngine::~QPaintEngine()

Zerstört den Farbmotor.

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

Implementieren Sie diese Funktion neu, um Ihre Paint-Engine zu initialisieren, wenn das Malen auf dem Malgerät pdev beginnen soll. Geben Sie true zurück, wenn die Initialisierung erfolgreich war; andernfalls geben Sie false zurück.

Siehe auch end() und isActive().

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

Implementieren Sie diese Funktion neu, um die größte Ellipse zu zeichnen, die im Rechteck rect enthalten sein kann.

Die Standardimplementierung ruft drawPolygon() auf.

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

Dies ist eine überladene Funktion.

Die Standardimplementierung dieser Funktion ruft die Fließkommaversion dieser Funktion auf

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

Reimplementieren Sie diese Funktion, um den Teil des image, der durch das Rechteck sr angegeben ist, in das angegebene rectangle unter Verwendung der angegebenen Konvertierungsflags flags zu zeichnen, um es in eine Pixmap zu konvertieren.

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

Die Standardimplementierung teilt die Liste der Zeilen in lines in lineCount separate Aufrufe an drawPath() oder drawPolygon() auf, je nach Funktionsumfang des Malprogramms.

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

Dies ist eine überladene Funktion.

Die Standardimplementierung wandelt die ersten lineCount Zeilen in lines in QLineF um und ruft die Gleitkommaversion dieser Funktion auf.

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

Die Standardimplementierung ignoriert die path und unternimmt nichts.

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

Reimplementieren Sie diese Funktion, um den Teil des pm zu zeichnen, der durch das Rechteck sr im angegebenen r angegeben ist.

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

Zeichnet die ersten pointCount Punkte im Puffer points

Die Standardimplementierung konvertiert die ersten pointCount QPoints in points in QPointFs und ruft die Fließkommaversion von drawPoints auf.

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

Zeichnet die ersten pointCount Punkte in den Puffer points

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

Reimplementieren Sie diese virtuelle Funktion, um das Polygon zu zeichnen, das durch die pointCount ersten Punkte in points definiert ist, unter Verwendung des Modus mode.

Hinweis: Mindestens eine der drawPolygon()-Funktionen muss neu implementiert werden.

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

Dies ist eine überladene Funktion.

Reimplementieren Sie diese virtuelle Funktion, um das Polygon zu zeichnen, das durch die pointCount ersten Punkte in points definiert ist, unter Verwendung des Modus mode.

Hinweis: Mindestens eine der drawPolygon()-Funktionen muss neu implementiert werden.

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

Zeichnet die ersten rectCount Rechtecke in den Puffer rects. Die Standardimplementierung dieser Funktion ruft drawPath() oder drawPolygon() auf, je nach Funktionsumfang des Malprogramms.

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

Dies ist eine überladene Funktion.

Die Standardimplementierung wandelt die ersten rectCount Rechtecke im Puffer rects in ein QRectF um und ruft die Fließkommaversion dieser Funktion auf.

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

Diese Funktion zeichnet das Textelement textItem an der Position p. Die Standardimplementierung dieser Funktion wandelt den Text in ein QPainterPath um und malt den daraus resultierenden Pfad.

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

Reimplementieren Sie diese Funktion, um die pixmap in der angegebenen rect zu zeichnen, beginnend mit der angegebenen p. Die Pixmap wird wiederholt gezeichnet, bis die rect gefüllt ist.

[pure virtual] bool QPaintEngine::end()

Reimplementieren Sie diese Funktion, um das Malen auf dem aktuellen Malgerät zu beenden. Gibt true zurück, wenn das Malen erfolgreich beendet wurde; andernfalls wird false zurückgegeben.

Siehe auch begin() und isActive().

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

Gibt true zurück, wenn die Paint-Engine die angegebene feature unterstützt; andernfalls wird false zurückgegeben.

bool QPaintEngine::isActive() const

Gibt true zurück, wenn die Paint-Engine aktiv zeichnet; andernfalls wird false zurückgegeben.

Siehe auch setActive().

QPaintDevice *QPaintEngine::paintDevice() const

Gibt das Gerät zurück, auf dem dieser Motor gerade malt, wenn das Malen aktiv ist; andernfalls wird nullptr zurückgegeben.

QPainter *QPaintEngine::painter() const

Gibt den Painter der Paint Engine zurück.

void QPaintEngine::setActive(bool state)

Setzt den aktiven Zustand der Paint Engine auf state.

Siehe auch isActive().

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

Implementieren Sie diese Funktion neu, um die Paint Engine Type zurückzugeben.

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

Reimplementieren Sie diese Funktion, um den Zustand einer Paint Engine zu aktualisieren.

Wenn diese Funktion implementiert ist, ist sie für die Überprüfung der aktuellen state der Paint Engine verantwortlich und aktualisiert die Eigenschaften, die geändert wurden. Verwenden Sie die Funktion QPaintEngineState::state(), um herauszufinden, welche Eigenschaften aktualisiert werden müssen, und verwenden Sie dann die entsprechende get function, um die aktuellen Werte für die angegebenen Eigenschaften abzurufen.

Siehe auch QPaintEngineState.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.