Sur cette page

QPaintEngine Class

La classe QPaintEngine fournit une définition abstraite de la manière dont QPainter dessine sur un périphérique donné sur une plate-forme donnée. Plus...

En-tête : #include <QPaintEngine>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui

Types publics

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 }

Fonctions publiques

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

Description détaillée

Qt fournit plusieurs implémentations de QPaintEngine pour les différents moteurs de peinture que nous supportons. Le principal moteur de peinture fourni est le moteur de peinture matricielle, qui contient un rasterizer logiciel prenant en charge l'ensemble des fonctionnalités sur toutes les plates-formes prises en charge. C'est le moteur par défaut pour peindre sur les classes basées sur QWidget, par exemple sous Windows, X11 et macOS, c'est le moteur dorsal pour peindre sur QImage et il est utilisé comme solution de repli pour les moteurs de peinture qui ne prennent pas en charge une certaine capacité. En outre, nous fournissons des implémentations de QPaintEngine pour OpenGL (accessibles via QOpenGLWidget) et l'impression (qui permet d'utiliser QPainter pour dessiner sur un objet QPrinter ).

Si l'on veut utiliser QPainter pour dessiner sur un backend différent, il faut sous-classer QPaintEngine et réimplémenter toutes ses fonctions virtuelles. L'implémentation de QPaintEngine est ensuite rendue disponible en sous-classant QPaintDevice et en réimplémentant la fonction virtuelle QPaintDevice::paintEngine().

QPaintEngine est créé et détenu par le site QPaintDevice qui l'a créé.

Voir également QPainter, QPaintDevice::paintEngine(), et Paint System.

Documentation des types de membres

enum QPaintEngine::DirtyFlag
flags QPaintEngine::DirtyFlags

ConstanteValeurDescription des drapeaux
QPaintEngine::DirtyPen0x0001Le stylo est sale et doit être mis à jour.
QPaintEngine::DirtyBrush0x0002Le pinceau est sale et doit être mis à jour.
QPaintEngine::DirtyBrushOrigin0x0004L'origine du pinceau est sale et doit être mise à jour.
QPaintEngine::DirtyFont0x0008La police est sale et doit être mise à jour.
QPaintEngine::DirtyBackground0x0010L'arrière-plan est sale et doit être mis à jour.
QPaintEngine::DirtyBackgroundMode0x0020Le mode d'arrière-plan est sale et doit être mis à jour.
QPaintEngine::DirtyTransform0x0040La transformation est sale et doit être mise à jour.
QPaintEngine::DirtyClipRegion0x0080La région du clip est sale et doit être mise à jour.
QPaintEngine::DirtyClipPath0x0100Le chemin du clip est sale et doit être mis à jour.
QPaintEngine::DirtyHints0x0200Les indices de rendu sont sales et doivent être mis à jour.
QPaintEngine::DirtyCompositionMode0x0400Le mode de composition est sale et doit être mis à jour.
QPaintEngine::DirtyClipEnabled0x0800L'activation ou non de l'écrêtage est sale et doit être mise à jour.
QPaintEngine::DirtyOpacity0x1000L'opacité constante a changé et doit être mise à jour dans le cadre du changement d'état dans QPaintEngine::updateState().
QPaintEngine::AllDirty0xffffEnum de commodité utilisé en interne.

Ces types sont utilisés par QPainter pour déclencher des mises à jour paresseuses des différents états dans QPaintEngine à l'aide de QPaintEngine::updateState().

Un moteur de peinture doit mettre à jour chaque état sale.

Le type DirtyFlags est un typedef pour QFlags<DirtyFlag>. Il stocke une combinaison OU de valeurs DirtyFlag.

enum QPaintEngine::PaintEngineFeature
flags QPaintEngine::PaintEngineFeatures

Cette énumération est utilisée pour décrire les caractéristiques ou les capacités du moteur de peinture. Si une fonctionnalité n'est pas prise en charge par le moteur, QPainter s'efforcera d'émuler cette fonctionnalité par d'autres moyens et transmettra au moteur un mélange alpha QImage avec les résultats émulés. Certaines fonctionnalités ne peuvent pas être émulées : AlphaBlend et PorterDuff.

ConstanteValeurDescription de la constante
QPaintEngine::AlphaBlend0x00000080Le moteur peut effectuer un mélange alpha des primitives.
QPaintEngine::Antialiasing0x00000400Le moteur peut utiliser l'anticrénelage pour améliorer l'apparence des primitives rendues.
QPaintEngine::BlendModes0x00008000Le moteur prend en charge les modes de fusion.
QPaintEngine::BrushStroke0x00000800Le moteur prend en charge les traits de dessin contenant des brosses comme remplissage, et pas seulement des couleurs unies (par exemple, une ligne de dégradé en pointillé de largeur 2).
QPaintEngine::ConicalGradientFill0x00000040Le moteur prend en charge les remplissages de dégradés coniques.
QPaintEngine::ConstantOpacity0x00001000Le moteur prend en charge la fonctionnalité fournie par QPainter::setOpacity().
QPaintEngine::LinearGradientFill0x00000010Le moteur prend en charge les remplissages de dégradés linéaires.
QPaintEngine::MaskedBrush0x00002000Le moteur est capable de rendre les brosses qui ont une texture avec un canal alpha ou un masque.
QPaintEngine::ObjectBoundingModeGradients0x00010000Le moteur prend en charge en mode natif les dégradés avec le mode de coordonnées QGradient::ObjectBoundingMode. Sinon, si QPaintEngine::PatternTransform est pris en charge, les dégradés du mode de délimitation des objets sont convertis en dégradés avec le mode de coordonnées QGradient::LogicalMode et une transformation de brosse pour le mappage des coordonnées.
QPaintEngine::PainterPaths0x00000200Le moteur prend en charge les chemins.
QPaintEngine::PaintOutsidePaintEvent0x20000000Le moteur est capable de peindre en dehors des événements de peinture.
QPaintEngine::PatternBrush0x00000008Le moteur est capable de rendre les brosses avec les motifs de brosse spécifiés dans Qt::BrushStyle.
QPaintEngine::PatternTransform0x00000002Le moteur prend en charge la transformation des motifs de brosse.
QPaintEngine::PerspectiveTransform0x00004000Le moteur permet d'effectuer des transformations de perspective sur les primitives.
QPaintEngine::PixmapTransform0x00000004Le moteur peut transformer les pixmaps, y compris la rotation et le cisaillement.
QPaintEngine::PorterDuff0x00000100Le moteur prend en charge les opérations Porter-Duff
QPaintEngine::PrimitiveTransform0x00000001Le moteur prend en charge la transformation des primitives de dessin.
QPaintEngine::RadialGradientFill0x00000020Le moteur prend en charge les remplissages par gradient radial.
QPaintEngine::RasterOpModes0x00020000Le moteur prend en charge les opérations matricielles par bits.
QPaintEngine::AllFeatures0xffffffffToutes les caractéristiques ci-dessus. Cette valeur de l'énumération est généralement utilisée comme masque de bits.

Le type PaintEngineFeatures est un typedef pour QFlags<PaintEngineFeature>. Il stocke une combinaison OU de valeurs de PaintEngineFeatures.

enum QPaintEngine::PolygonDrawMode

ConstanteValeurDescription
QPaintEngine::OddEvenMode0Le polygone doit être dessiné en utilisant la règle de remplissage OddEven.
QPaintEngine::WindingMode1Le polygone doit être dessiné en utilisant la règle de remplissage Winding.
QPaintEngine::ConvexMode2Le polygone est un polygone convexe et peut être dessiné à l'aide d'algorithmes spécialisés lorsqu'ils sont disponibles.
QPaintEngine::PolylineMode3Seul le contour du polygone doit être dessiné.

enum QPaintEngine::Type

ConstanteValeurDescription de Quartz2D
QPaintEngine::X110
QPaintEngine::Windows1
QPaintEngine::MacPrinter4
QPaintEngine::CoreGraphics3Quartz2D de macOS (CoreGraphics)
QPaintEngine::QuickDraw2QuickDraw de macOS
QPaintEngine::QWindowSystem5Qt pour Linux embarqué
QPaintEngine::OpenGL6
QPaintEngine::Picture7QPicture format
QPaintEngine::SVG8Scalable Vector Graphics format XML
QPaintEngine::Raster9
QPaintEngine::Direct3D10Windows uniquement, moteur basé sur Direct3D
QPaintEngine::Pdf11Format de document portable
QPaintEngine::OpenVG12
QPaintEngine::User50ID du premier type d'utilisateur
QPaintEngine::MaxUser100ID du dernier type d'utilisateur
QPaintEngine::OpenGL213
QPaintEngine::PaintBuffer14
QPaintEngine::Blitter15
QPaintEngine::Direct2D16Windows uniquement, moteur basé sur Direct2D

Documentation des fonctions membres

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

Crée un moteur de peinture avec le jeu de caractéristiques spécifié par caps.

[virtual noexcept] QPaintEngine::~QPaintEngine()

Détruit le moteur de peinture.

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

Réimplémentez cette fonction pour initialiser votre moteur de peinture lorsque la peinture doit commencer sur le dispositif de peinture pdev. Elle renvoie la valeur true si l'initialisation a réussi ; sinon, elle renvoie la valeur false.

Voir également end() et isActive().

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

Réimplémentez cette fonction pour dessiner la plus grande ellipse pouvant être contenue dans le rectangle rect.

L'implémentation par défaut appelle drawPolygon().

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

L'implémentation par défaut de cette fonction appelle la version en virgule flottante de cette fonction

Il s'agit d'une fonction surchargée.

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

Réimplémenter cette fonction pour dessiner la partie de image spécifiée par le rectangle sr dans rectangle en utilisant les drapeaux de conversion flags, pour la convertir en pixmap.

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

L'implémentation par défaut divise la liste des lignes dans lines en lineCount appels distincts à drawPath() ou drawPolygon() en fonction de l'ensemble des caractéristiques du moteur de peinture.

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

L'implémentation par défaut convertit les premières lignes de lineCount dans lines en QLineF et appelle la version en virgule flottante de cette fonction.

Il s'agit d'une fonction surchargée.

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

L'implémentation par défaut ignore le site path et ne fait rien.

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

Réimplémenter cette fonction pour dessiner la partie de pm spécifiée par le rectangle sr dans le r donné.

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

Dessine les premiers points pointCount de la mémoire tampon. points

L'implémentation par défaut convertit les premiers pointCount QPoints de points en QPointFs et appelle la version en virgule flottante de drawPoints.

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

Dessine les premiers pointCount points de la mémoire tampon points

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

Réimplémenter cette fonction virtuelle pour dessiner le polygone défini par les pointCount premiers points de points, en utilisant le mode mode.

Remarque : au moins une des fonctions drawPolygon() doit être réimplémentée.

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

Réimplémenter cette fonction virtuelle pour dessiner le polygone défini par les pointCount premiers points de points, en utilisant le mode mode.

Remarque : au moins une des fonctions drawPolygon() doit être réimplémentée.

Il s'agit d'une fonction surchargée.

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

Dessine les premiers rectCount rectangles dans le tampon rects. L'implémentation par défaut de cette fonction appelle drawPath() ou drawPolygon() en fonction des caractéristiques du moteur de peinture.

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

L'implémentation par défaut convertit les premiers rectangles rectCount de la mémoire tampon rects en QRectF et appelle la version en virgule flottante de cette fonction.

Il s'agit d'une fonction surchargée.

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

Cette fonction dessine l'élément de texte textItem à la position p. L'implémentation par défaut de cette fonction convertit le texte en QPainterPath et peint le chemin résultant.

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

Réimplémentez cette fonction pour dessiner le pixmap dans le rect donné, en commençant par le p donné. La pixmap sera dessinée à plusieurs reprises jusqu'à ce que le site rect soit rempli.

[pure virtual] bool QPaintEngine::end()

Réimplémente cette fonction pour terminer la peinture sur le dispositif de peinture actuel. Elle renvoie la valeur true si la peinture a été terminée avec succès, sinon elle renvoie la valeur false.

Voir également begin() et isActive().

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

Renvoie true si le moteur de peinture prend en charge l'élément spécifié feature; sinon, renvoie false.

bool QPaintEngine::isActive() const

Renvoie true si le moteur de peinture est en train de dessiner, sinon renvoie false.

Voir également setActive().

QPaintDevice *QPaintEngine::paintDevice() const

Renvoie le périphérique sur lequel ce moteur est en train de peindre, si la peinture est active ; sinon, renvoie nullptr.

QPainter *QPaintEngine::painter() const

Renvoie le peintre du moteur de peinture.

void QPaintEngine::setActive(bool state)

Définit l'état actif du moteur de peinture à state.

Voir également isActive().

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

Réimplémenter cette fonction pour renvoyer le moteur de peinture Type.

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

Réimplémentez cette fonction pour mettre à jour l'état d'un moteur de peinture.

Lorsqu'elle est mise en œuvre, cette fonction est chargée de vérifier l'état actuel du moteur de peinture state et de mettre à jour les propriétés qui sont modifiées. Utilisez la fonction QPaintEngineState::state() pour déterminer les propriétés qui doivent être mises à jour, puis utilisez la fonction get function correspondante pour récupérer les valeurs actuelles des propriétés données.

Voir également QPaintEngineState.

© 2026 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.