Sur cette page

QCanvasPainter Class

La classe QCanvasPainter effectue un traçage accéléré par le matériel sur QRhi. En savoir plus...

En-tête : #include <QCanvasPainter>
CMake : find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)
target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter)
Depuis : Qt 6.11

Types publics

enum class CompositeOperation { SourceOver, SourceAtop, DestinationOut }
(since 6.12) enum class FillRule { NonZero, EvenOdd }
enum class ImageFlag { GenerateMipmaps, RepeatX, RepeatY, Repeat, FlipY, …, Nearest }
flags ImageFlags
enum class LineCap { Butt, Round, Square }
enum class LineJoin { Round, Bevel, Miter }
enum class PathConnection { NotConnected, Connected }
enum class PathWinding { CounterClockWise, ClockWise }
enum class TextAlign { Left, Right, Center, Start, End }
enum class TextBaseline { Top, Hanging, Middle, Alphabetic, Bottom }
enum class TextDirection { LeftToRight, RightToLeft, Inherit, Auto }
enum class WrapMode { NoWrap, Wrap, WordWrap, WrapAnywhere }

Fonctions publiques

QCanvasPainter()
~QCanvasPainter()
qsizetype activeImageCount() const
qsizetype activeImageMemoryUsage() const
QCanvasImage addImage(const QImage &image, QCanvasPainter::ImageFlags flags = {})
QCanvasImage addImage(QRhiTexture *texture, QCanvasPainter::ImageFlags flags = {})
QCanvasImage addImage(const QCanvasOffscreenCanvas &canvas, QCanvasPainter::ImageFlags flags = {})
void addPath(const QPainterPath &path)
void addPath(const QCanvasPath &path, const QTransform &transform = QTransform())
void addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform())
void arc(qreal centerX, qreal centerY, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
void arc(QPointF centerPoint, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)
void arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius)
void arcTo(QPointF controlPoint1, QPointF controlPoint2, qreal radius)
void beginHoleSubPath()
void beginPath()
void beginSolidSubPath()
void bezierCurveTo(qreal cp1X, qreal cp1Y, qreal cp2X, qreal cp2Y, qreal x, qreal y)
void bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)
void circle(qreal centerX, qreal centerY, qreal radius)
void circle(QPointF centerPoint, qreal radius)
void cleanupResources()
void clearRect(qreal x, qreal y, qreal width, qreal height)
void clearRect(const QRectF &rect)
void closePath()
QCanvasOffscreenCanvas createCanvas(QSize pixelSize, int sampleCount = 1, QCanvasOffscreenCanvas::Flags flags = {})
void destroyCanvas(QCanvasOffscreenCanvas &canvas)
void drawBoxShadow(const QCanvasBoxShadow &shadow)
void drawImage(const QCanvasImage &image, qreal x, qreal y)
void drawImage(const QCanvasImage &image, const QRectF &destinationRect)
void drawImage(const QCanvasImage &image, const QRectF &sourceRect, const QRectF &destinationRect)
void drawImage(const QCanvasImage &image, qreal x, qreal y, qreal width, qreal height)
void ellipse(qreal centerX, qreal centerY, qreal radiusX, qreal radiusY)
void ellipse(const QRectF &rect)
void ellipse(QPointF centerPoint, qreal radiusX, qreal radiusY)
void fill()
(since 6.12) void fill(QCanvasPainter::FillRule fillRule)
void fill(const QCanvasPath &path, int pathGroup = -1)
(since 6.12) void fill(const QCanvasPath &path, QCanvasPainter::FillRule fillRule, int pathGroup = -1)
void fillRect(qreal x, qreal y, qreal width, qreal height)
void fillRect(const QRectF &rect)
void fillText(const QString &text, qreal x, qreal y, qreal maxWidth = 0)
void fillText(const QString &text, const QRectF &rect)
void fillText(const QString &text, QPointF point, qreal maxWidth = 0)
QTransform getTransform() const
void lineTo(qreal x, qreal y)
void lineTo(QPointF point)
void moveTo(qreal x, qreal y)
void moveTo(QPointF point)
void quadraticCurveTo(qreal cpX, qreal cpY, qreal x, qreal y)
void quadraticCurveTo(QPointF controlPoint, QPointF endPoint)
void rect(qreal x, qreal y, qreal width, qreal height)
void rect(const QRectF &rect)
void removeImage(const QCanvasImage &image)
void removePathGroup(int pathGroup)
void reset()
void resetClipping()
void resetTransform()
void restore()
void rotate(qreal angle)
void roundRect(qreal x, qreal y, qreal width, qreal height, qreal radius)
void roundRect(const QRectF &rect, qreal radius)
void roundRect(const QRectF &rect, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
void roundRect(qreal x, qreal y, qreal width, qreal height, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
void save()
void scale(qreal scale)
void scale(qreal scaleX, qreal scaleY)
void setAntialias(qreal antialias)
void setClipRect(qreal x, qreal y, qreal width, qreal height)
void setClipRect(const QRectF &rect)
(since 6.12) void setFillRule(QCanvasPainter::FillRule fillRule)
void setFillStyle(QColor color)
void setFillStyle(const QCanvasBrush &brush)
void setFont(const QFont &font)
void setGlobalAlpha(qreal alpha)
void setGlobalBrightness(qreal value)
void setGlobalCompositeOperation(QCanvasPainter::CompositeOperation operation)
void setGlobalContrast(qreal value)
void setGlobalSaturation(qreal value)
void setHighQualityStroking(bool enabled)
void setLineCap(QCanvasPainter::LineCap cap)
void setLineJoin(QCanvasPainter::LineJoin join)
void setLineWidth(qreal width)
void setMiterLimit(qreal limit)
void setPathWinding(QCanvasPainter::PathWinding winding)
void setStrokeStyle(QColor color)
void setStrokeStyle(const QCanvasBrush &brush)
void setTextAlign(QCanvasPainter::TextAlign align)
void setTextAntialias(qreal antialias)
void setTextBaseline(QCanvasPainter::TextBaseline baseline)
void setTextDirection(QCanvasPainter::TextDirection direction)
void setTextLineHeight(qreal height)
void setTextWrapMode(QCanvasPainter::WrapMode wrapMode)
void setTransform(const QTransform &transform)
void setWindingEnforce(bool enabled)
void skew(qreal angleX, qreal angleY = 0.0)
void stroke()
void stroke(const QCanvasPath &path, int pathGroup = -1)
void strokeRect(qreal x, qreal y, qreal width, qreal height)
void strokeRect(const QRectF &rect)
QRectF textBoundingBox(const QString &text, qreal x, qreal y, qreal maxWidth = 0) const
QRectF textBoundingBox(const QString &text, const QRectF &rect) const
QRectF textBoundingBox(const QString &text, QPointF point, qreal maxWidth = 0) const
void transform(const QTransform &transform)
void translate(qreal x, qreal y)
void translate(QPointF point)

Description détaillée

Qt Canvas Painter (QCanvasPainter) fournit une API de dessin optimisée pour le dessin accéléré par le matériel (GPU). L'API suit de près la spécification HTML Canvas 2D Context, portée vers Qt C++. Elle s'inspire également de QPainter, mais avec une API plus compacte.

Voici un exemple simple d'utilisation de QCanvasPainter pour créer un bouton rond.

Bouton rond jaune portant l'inscription « CLICK ! » et doté d'une ombre portée légère
QRectF rect(40, 70, 120, 60);
QRectF shadowRect = rect.translated(2, 4);
// Paint shadow
QCanvasBoxShadow shadow(shadowRect);
shadow.setRadius(30);
shadow.setBlur(15);
shadow.setColor("#60373F26");
p->drawBoxShadow(shadow);
// Paint rounded rect
p->beginPath();
p->roundRect(rect, 30);
p->setFillStyle("#DBEB00");
p->fill();
// Paint text
p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QFont font("Titillium Web", 18);
p->setFont(font);
p->setFillStyle("#373F26");
p->fillText("CLICK!", rect);

Voici un autre exemple de dessin d'un graphique simple.

Ombrage en courbe en S allant du vert au rouge sur une grille sombre avec des axes blancs
// Paint grid
QCanvasGridPattern grid(0, 0, 10, 10);
grid.setLineColor("#404040");
grid.setBackgroundColor("#202020");
p->setFillStyle(grid);
p->fillRect(0, 0, width(), height());
// Paint axis
p->setFillStyle(QColorConstants::White);
p->fillRect(0, 0.5 * height() - 1, width(), 2);
p->fillRect(0.5 * width() - 1, 0, 2, height());
// Paint shadowed graph
p->beginPath();
p->moveTo(20, height() * 0.8);
p->bezierCurveTo(width() * 0.2, height() * 0.4,
                 width() * 0.5, height() * 0.8,
                 width() - 20, height() * 0.2);
p->setAntialias(10);
p->setLineWidth(12);
p->setStrokeStyle("#D0000000");
p->stroke();
p->setAntialias(1);
p->setLineWidth(6);
QCanvasLinearGradient lg(0, 0, 0, height());
lg.setStartColor(QColorConstants::Red);
lg.setEndColor(QColorConstants::Green);
p->setStrokeStyle(lg);
p->stroke();

Fonctionnalités

Dans l’ensemble, et du point de vue de la nomenclature, QCanvasPainter suit le contexte 2D HTML Canvas (https://html.spec.whatwg.org/multipage/canvas.html#2dcontext). Cela rend l’API familière à de nombreux développeurs et permet de réutiliser facilement le code Canvas existant. Cependant, l’objectif n’est PAS d’assurer une compatibilité à 100 % avec le Canvas HTML. QCanvasPainter omet certaines fonctionnalités afin d'être plus simple, plus performant sur l'API graphique accélérée par le matériel d'QRhi, et de mieux répondre aux besoins des interfaces utilisateur modernes. Pour ces raisons, QCanvasPainter dispose également de fonctionnalités supplémentaires par rapport au contexte 2D HTML Canvas.

Voici quelques-unes des fonctionnalités qui font actuellement défaut par rapport au canevas HTML :

  • Découpage : tout découpage est un rectangle (transformé) et le découpage selon des formes de chemin n'est pas pris en charge.
  • Tirages : les traits sont toujours des lignes pleines ; les motifs de traits en pointillés ou en traits discontinus ne sont pas pris en charge.
  • Test de chemin : il n’existe pas de méthodes isPointInPath() ou isPointInStroke().
  • Contour du texte : le contour du texte n’est pas pris en charge.
  • Filtres : les effets de filtre SVG de Canvas ne sont pas pris en charge.
  • Modes de composition : le nombre de modes de composition est limité à 3, ce qui peut être pris en charge sans rendu dans des tampons supplémentaires.
  • Ombres : les méthodes d'ombre intégrées ne sont pas prises en charge.

En revanche, QCanvasPainter offre certaines fonctionnalités supplémentaires par rapport à HTML Canvas, notamment :

  • Groupes de chemins : QCanvasPainter permet de dessiner sur des chemins statiques et de mettre ces chemins en cache sous forme de groupes pour une utilisation optimale du GPU.
  • Anticrénelage réglable : grâce à l’anticrénelage des sommets de chemin et au rendu de texte SDF, le nombre de pixels d’anticrénelage peut être librement ajusté pour un tracé plus fluide.
  • Dégradé de rectangle : outre les dégradés linéaires, radiaux et coniques, QCanvasPainter prend également en charge le dégradé de rectangle arrondi.
  • Ombre portée : QCanvasPainter prend également en charge le type de pinceau « box-shadow » du CSS. Le rendu utilise une approche SDF similaire à celle décrite à l’adresse Qt Quick RectangularShadow , ce qui le rend très performant.
  • Motifs en grille : QCanvasPainter prend en charge QCanvasGridPattern pour les styles dynamiques de grille et de motifs en barres.
  • Pinceaux personnalisés : QCanvasPainter permet également de remplir et de tracer des contours à l'aide de shaders de sommets et de fragments personnalisés (QCanvasCustomBrush). Ces pinceaux personnalisés peuvent également être utilisés pour le texte.
  • Retour à la ligne : QCanvasPainter prend en charge le retour à la ligne automatique du texte sur plusieurs lignes, avec différents modes de retour à la ligne.
  • Effets de couleur : en plus de globalAlpha, QCanvasPainter prend également en charge la luminosité, le contraste et la saturation globaux.
  • Images teintées : QCanvasPainter ajoute la prise en charge de la teinte pour les images peintes et les motifs d’image.

QCanvasPainter est indépendant de l’architecture et peut être utilisé aussi bien pour les applications Qt Quick que pour celles de type Qt Widgets. En réalité, il est même utilisable sans aucune de ces deux bibliothèques, en utilisant simplement QWindow et QRhi. Pour utiliser QCanvasPainter, appelez-le à partir de l’une de ces classes, en fonction de l’architecture de votre application :

Règles de remplissage

QCanvasPainter utilise par défaut la règle de remplissage NonZero ({Qt::WindingFill}). Pour sélectionner le remplissage en fonction de la direction des points du tracé, désactivez le forçage de l’enroulement en appelant setWindingEnforce(false).

Triangle vert pointant vers le bas, avec un petit trou triangulaire non rempli près de son sommet
p->setWindingEnforce(false);
p->beginPath();
// Outer shape, counterclockwise
p->moveTo(20, 20);
p->lineTo(100, 180);
p->lineTo(180, 20);
p->closePath();
// Inner shape, clockwise
p->moveTo(100, 40);
p->lineTo(125, 90);
p->lineTo(75, 90);
p->closePath();
p->fill();
p->stroke();

Cependant, le cas le plus courant consiste à s'appuyer sur l'application de la règle de remplissage et à définir le sens de remplissage souhaité à l'aide des fonctions d'aide setPathWinding() ou beginHoleSubPath() et beginSolidSubPath().

Contour carré arrondi de couleur verte entourant un trou arrondi qui contient une barre pleine et un point
p->beginPath();
p->roundRect(20, 20, 160, 160, 30);
// Start painting holes
p->beginHoleSubPath();
p->roundRect(40, 40, 120, 120, 10);
// Start painting solid
p->beginSolidSubPath();
p->rect(60, 60, 80, 20);
p->circle(100, 120, 20);
p->fill();
p->stroke();

Documentation sur les types de membres

enum class QCanvasPainter::CompositeOperation

Qt Canvas Painter prend en charge 3 opérations de composition :

ConstanteValeurDescription
QCanvasPainter::CompositeOperation::SourceOver0Valeur par défaut. Dessine de nouvelles formes par-dessus le contenu existant.
QCanvasPainter::CompositeOperation::SourceAtop1La nouvelle forme n'est dessinée que là où elle chevauche le contenu existant.
QCanvasPainter::CompositeOperation::DestinationOut2Le contenu existant est conservé là où il ne chevauche pas la nouvelle forme.

Voir aussi setGlobalCompositeOperation().

[since 6.12] enum class QCanvasPainter::FillRule

Cette énumération définit la manière dont les chemins sont remplis.

ConstanteValeurDescription
QCanvasPainter::FillRule::NonZero0Le tracé est rempli selon la règle d'enroulement non nulle. Avec cette règle, on détermine si un point se trouve à l'intérieur de la forme en procédant comme suit : on trace une ligne horizontale partant du point vers un emplacement situé à l'extérieur de la forme. On détermine si la direction de la ligne à chaque point d'intersection est vers le haut ou vers le bas. Le nombre de boucles est déterminé en additionnant les directions observées à chaque intersection. Si ce nombre est différent de zéro, le point se trouve à l’intérieur de la forme. Ce mode de remplissage peut également, dans la plupart des cas, être considéré comme l’intersection de formes fermées. Ce mode est le mode par défaut.
QCanvasPainter::FillRule::EvenOdd1Le tracé est rempli selon la règle de remplissage « pair-impair ». Avec cette règle, on détermine si un point se trouve à l’intérieur de la forme en procédant comme suit : tracez une ligne horizontale partant du point vers un emplacement situé à l’extérieur de la forme, puis comptez le nombre d’intersections. Si ce nombre est impair, le point se trouve à l’intérieur de la forme.

Cette énumération a été introduite dans Qt 6.12.

Voir également fill().

enum class QCanvasPainter::ImageFlag
flags QCanvasPainter::ImageFlags

Cette énumération définit des indicateurs liés aux images. À utiliser avec la fonction addImage() pour définir ces indicateurs.

ConstanteValeurDescription
QCanvasPainter::ImageFlag::GenerateMipmaps1 << 0Définissez cette valeur pour générer des mipmaps pour l'image. Les mipmaps doivent être utilisées lorsque l'on souhaite obtenir un rendu plus lisse pour les images redimensionnées à une taille inférieure à la taille d'origine.
QCanvasPainter::ImageFlag::RepeatX1 << 1À utiliser avec le motif d'image pour répéter l'image selon la coordonnée X.
QCanvasPainter::ImageFlag::RepeatY1 << 2À utiliser avec le motif d’image pour répéter l’image selon la coordonnée Y.
QCanvasPainter::ImageFlag::RepeatRepeatX | RepeatYÀ utiliser avec le motif d'image pour répéter l'image selon les deux coordonnées.
QCanvasPainter::ImageFlag::FlipY1 << 3Inverse l'image dans la direction Y lors du rendu.
QCanvasPainter::ImageFlag::Premultiplied1 << 4Les données d'image comportent un alpha pré-multiplié.
QCanvasPainter::ImageFlag::Nearest1 << 5L’interpolation de l’image est de type « Nearest » (plus proche) au lieu de « Linear » (linéaire)

Le type `ImageFlags` est un `typedef` pour ` QFlags<ImageFlag>`. Il stocke une combinaison OR de valeurs `ImageFlag`.

enum class QCanvasPainter::LineCap

La propriété LineCap permet de définir la manière dont l'extrémité de la ligne (cap) est dessinée.

ConstanteValeurDescription
QCanvasPainter::LineCap::Butt0(par défaut) Extrémité carrée de la ligne qui ne recouvre pas le point d'extrémité de la ligne.
QCanvasPainter::LineCap::Round1Extrémité de ligne arrondie.
QCanvasPainter::LineCap::Square2Extrémité carrée qui recouvre le point d'extrémité et s'étend au-delà de celui-ci de la moitié de la largeur de la ligne.

Voir aussi setLineCap().

enum class QCanvasPainter::LineJoin

La propriété `LineJoin` permet de définir la manière dont sont tracées les jonctions entre deux lignes reliées.

ConstanteValeurDescription
QCanvasPainter::LineJoin::Round0L'arc de cercle entre les deux lignes est rempli.
QCanvasPainter::LineJoin::Bevel1L'encoche triangulaire entre les deux lignes est remplie.
QCanvasPainter::LineJoin::Miter2(par défaut) Les bords extérieurs des lignes sont prolongés pour se rejoindre en formant un angle, et cette zone est remplie.

Voir aussi setLineJoin() et setMiterLimit().

enum class QCanvasPainter::PathConnection

Dans certaines méthodes de dessin, la fonction PathConnection sert à indiquer si le nouveau tracé doit être relié au dernier point du tracé précédent.

ConstanteValeurDescription
QCanvasPainter::PathConnection::NotConnected0Aucune ligne n'est tracée entre le dernier point du tracé précédent et le premier point du tracé actuel.
QCanvasPainter::PathConnection::Connected1Le dernier point du tracé précédent sera relié au premier point du tracé actuel.

Voir aussi arc().

enum class QCanvasPainter::PathWinding

La propriété « PathWinding » sert à définir le sens de tracé d'un chemin. Ce sens permet de déterminer si un sous-chemin est plein ou s'il s'agit d'une ouverture dans le chemin.

ConstanteValeurDescription
QCanvasPainter::PathWinding::CounterClockWise0(par défaut) Enroulement dans le sens antihoraire pour les formes pleines.
QCanvasPainter::PathWinding::ClockWise1Enroulement dans le sens des aiguilles d’une montre pour les trous.

Voir aussi setPathWinding().

enum class QCanvasPainter::TextAlign

La propriété `TextAlign` sert à définir l'alignement horizontal du texte.

ConstanteValeurDescription
QCanvasPainter::TextAlign::Left0Aligne horizontalement le côté gauche du texte sur la position spécifiée.
QCanvasPainter::TextAlign::Right1Aligne horizontalement le côté droit du texte sur la position spécifiée.
QCanvasPainter::TextAlign::Center2Aligne le centre du texte horizontalement sur la position spécifiée.
QCanvasPainter::TextAlign::Start3(par défaut) Le texte est aligné au début normal de la ligne (aligné à gauche pour les langues s'écrivant de gauche à droite, aligné à droite pour celles s'écrivant de droite à gauche).
QCanvasPainter::TextAlign::End4Le texte est aligné à la fin normale de la ligne (aligné à droite pour les langues s'écrivant de gauche à droite, aligné à gauche pour les langues s'écrivant de droite à gauche).

Voir également setTextAlign(), setTextDirection() et fillText().

enum class QCanvasPainter::TextBaseline

La propriété « TextBaseline » permet de définir l'alignement vertical du texte (par rapport à la ligne de base).

ConstanteValeurDescription
QCanvasPainter::TextBaseline::Top0Aligne verticalement le haut du texte sur la position spécifiée.
QCanvasPainter::TextBaseline::Hanging1Aligne verticalement la ligne de base suspendue du texte sur la position spécifiée.
QCanvasPainter::TextBaseline::Middle2Aligne le milieu du texte verticalement sur la position spécifiée.
QCanvasPainter::TextBaseline::Alphabetic3(par défaut) Aligne verticalement la ligne de base du texte sur la position spécifiée.
QCanvasPainter::TextBaseline::Bottom4Aligne verticalement le bas du texte à la position spécifiée.

Voir aussi setTextBaseline() et fillText().

enum class QCanvasPainter::TextDirection

La propriété TextDirection permet de définir l'alignement horizontal du texte.

ConstanteValeurDescription
QCanvasPainter::TextDirection::LeftToRight0Le texte est aligné de gauche à droite.
QCanvasPainter::TextDirection::RightToLeft1La direction du texte est de droite à gauche.
QCanvasPainter::TextDirection::Inherit2(par défaut) Le sens d'écriture est hérité de la propriété layoutDirection de QGuiApplication. Voir https://doc.qt.io/qt-6/qguiapplication.html#layoutDirection-prop.
QCanvasPainter::TextDirection::Auto3La direction du texte est détectée automatiquement à partir de la chaîne de texte. Voir QString::isRightToLeft().

Remarque : comme cela nécessite d’analyser le texte, cette option est potentiellement plus lente que les autres.

Voir également setTextDirection(), setTextAlign() et fillText().

enum class QCanvasPainter::WrapMode

WrapMode permet de définir la manière dont le texte est réparti sur plusieurs lignes.

ConstanteValeurDescription
QCanvasPainter::WrapMode::NoWrap0(par défaut) Aucun retour à la ligne n'est effectué. Si le texte ne contient pas suffisamment de sauts de ligne, la largeur du contenu (contentWidth) dépassera la largeur définie.
QCanvasPainter::WrapMode::Wrap1Si possible, le retour à la ligne s'effectue à la fin d'un mot ; sinon, il s'effectue à l'endroit approprié sur la ligne, même au milieu d'un mot.
QCanvasPainter::WrapMode::WordWrap2Le retour à la ligne s’effectue uniquement à la fin d’un mot. Si un mot est trop long, la largeur du contenu dépassera la largeur définie.
QCanvasPainter::WrapMode::WrapAnywhere3Le retour à la ligne s'effectue à n'importe quel endroit de la ligne, même au milieu d'un mot.

Voir également setTextWrapMode() et fillText().

Documentation des fonctions membres

QCanvasPainter::QCanvasPainter()

Crée un « painter ».

[noexcept] QCanvasPainter::~QCanvasPainter()

Il détruit le peintre.

qsizetype QCanvasPainter::activeImageCount() const

Renvoie le nombre d'objets « QCanvasImage » actifs enregistrés auprès de cette instance de ` QCanvasPainter`. Ce nombre inclut également les images créées en interne pour ` gradients`.

QCanvasImage Les objets créés par l'enregistrement d'instances de ` QCanvasOffscreenCanvas ` ou les textures gérées en externe ne sont pas pris en compte par cette fonction.

Voir également activeImageMemoryUsage(), addImage() et removeImage().

qsizetype QCanvasPainter::activeImageMemoryUsage() const

Renvoie une estimation, en kilo-octets, de la mémoire utilisée par les données d’image (pixels) de toutes les instances actives de ` QCanvasImage ` pour ce « peintre », qui ont été créées par la surcharge de la méthode ` addImage()` prenant un ` QImage`. Cela inclut également les données provenant des images créées en interne pour ` gradients`.

QCanvasPainter ne conserve pas de copies des données d’ QImage s côté CPU une fois que addImage() a renvoyé une valeur. Par conséquent, le résultat de cette fonction est une approximation de la mémoire GPU utilisée pour les textures.

Remarque : cette valeur n’est qu’une estimation basée sur le format et les dimensions de l’image. Qt n’a aucune connaissance de la manière dont les données des textures sont stockées et organisées en mémoire côté GPU.

Les canevas hors écran et les textures gérées en externe enregistrées via les autres surcharges de la fonction ` addImage()` ne sont pas pris en compte par cette fonction.

Pour chaque ` QCanvasImage` valide, la taille individuelle en octets peut toujours être interrogée en appelant ` sizeInBytes()`. Cette fonction renvoie des résultats valides même lorsque l’` QCanvasImage ` a été créé à partir d’un ` QCanvasOffscreenCanvas ` ou d’un ` QRhiTexture`, mais elle ne prend pas en compte les données de mipmap ni de multisample.

Voir également activeImageCount(), addImage() et removeImage().

QCanvasImage QCanvasPainter::addImage(const QImage &image, QCanvasPainter::ImageFlags flags = {})

Ajoute l'image, dont l'flags est accessible au peintre en tant que texture. Renvoie l'QCanvasImage contenant l'identifiant de la texture et d'autres informations sur l'image. L'QCanvasImage renvoyé peut ensuite être utilisé avec les méthodes drawImage et QCanvasImagePattern. Après l'appel de cette méthode, il n'est pas nécessaire de conserver en mémoire l'image QImage .

L'appel avec le même image est une opération peu coûteuse, car on s'attend à un accès au cache.

Lors de l’optimisation, il faut veiller à n’appeler addImage() qu’une seule fois. Cela n’est pas toujours suffisant, selon la conception de l’application. Par exemple, si les ressources graphiques sous-jacentes sont perdues, par exemple parce que le « painter » est associé en arrière-plan à une nouvelle QRhi suite au déplacement d’un widget vers un nouveau niveau supérieur, alors l’appel de cette fonction est essentiel pour recréer les textures graphiques natives à partir de image.

Voir également drawImage() et removeImage().

QCanvasImage QCanvasPainter::addImage(QRhiTexture *texture, QCanvasPainter::ImageFlags flags = {})

Ajoute texture avec flags, disponible pour le peintre en tant que texture. L'QCanvasImage renvoyé peut être utilisé avec drawImage et QCanvasImagePattern.

Remarque : la propriété de texture n’ est pas prise en charge.

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

Voir également drawImage() et removeImage().

QCanvasImage QCanvasPainter::addImage(const QCanvasOffscreenCanvas &canvas, QCanvasPainter::ImageFlags flags = {})

Enregistre canvas auprès de flags auprès du « painter » afin qu’il soit disponible en tant qu’image. L’objet QCanvasImage renvoyé peut être utilisé avec drawImage et QCanvasImagePattern.

Remarque : ` canvas ` continue de gérer les ressources graphiques natives sous-jacentes, ce qui signifie que ` removeImage()` ne rend pas ` canvas ` invalide.

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

Voir également drawImage() et removeImage().

void QCanvasPainter::addPath(const QPainterPath &path)

Ajoute path au chemin d'accès actuel.

Remarque : QCanvasPainter utilise par défaut la règle de remplissage « NonZero » (Qt::WindingFill), tandis que QPainterPath utilise par défaut « Qt::OddEvenFill ». Pensez donc à modifier la règle de remplissage si nécessaire, par exemple en utilisant setFillRule().

Remarque : cette méthode est principalement disponible à des fins de compatibilité avec QPainter et QPainterPath. Elle n’améliore pas les performances par rapport au tracé direct du chemin à l’aide des méthodes QCanvasPainter.

void QCanvasPainter::addPath(const QCanvasPath &path, const QTransform &transform = QTransform())

Ajoute path au chemin actuel, en utilisant éventuellement transform pour modifier les points du chemin. Lorsque transform n'est pas fourni (ou qu'il s'agit de la matrice identité), cette opération est très rapide car elle réutilise les données du chemin.

Deux cercles verts identiques, le second étant une copie décalée du premier
// m_path is QCanvasPath
if (m_path.isEmpty())
    m_path.circle(60, 60, 40);
p->beginPath();
p->addPath(m_path);
p->addPath(m_path, QTransform::fromTranslate(80, 80));
p->fill();
p->stroke();

void QCanvasPainter::addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform())

Ajoute path au chemin actuel, en partant de la commande située à l'adresse start et en incluant count nombre de commandes. Il est possible d'utiliser transform pour modifier les points du chemin. La plage comprise entre start et count est vérifiée, afin que les commandes ne soient pas consultées au-delà de QCanvasPath::commandsSize(). Si le chemin ne doit pas se poursuivre à partir de la position actuelle, appelez d'abord moveTo(), par exemple avec path.positionAt(start - 1).

Une onde sinusoïdale au-dessus d'un segment plus court de la même onde reproduit en dessous
// m_path is QCanvasPath
if (m_path.isEmpty()) {
    m_path.moveTo(20, 60);
    for (int i = 1; i < 160; i++) {
        m_path.lineTo(20 + i,
                      60 + 20 * sin(0.1 * i));
    }
}
p->stroke(m_path);
p->beginPath();
p->addPath(m_path, 20, 100,
           QTransform::fromTranslate(0, 80));
p->stroke();

void QCanvasPainter::arc(qreal centerX, qreal centerY, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)

Crée un nouveau sous-trajet en forme d’arc de cercle. Le centre de l’arc se trouve à l’adresse centerX, centerY, avec radius, et l’arc est tracé à partir de l’angle a0 jusqu’à a1, et balayé selon direction (ClockWise ou CounterClockWise). Lorsque connection vaut NotConnected, l’arc n’ajoute pas de ligne reliant la position du trajet précédent au début de l’arc. Les angles sont spécifiés en radians.

Une forme de tarte verte occupant les trois quarts d'un cercle, laissant un quadrant vide
p->beginPath();
p->moveTo(100, 100);
p->arc(100, 100, 80, 0, 1.5 * M_PI);
p->closePath();
p->fill();
p->stroke();

Remarque : alors que le contexte 2D HTML canvas utilise la fonction arc() pour dessiner des cercles, avec QCanvasPainter, il est recommandé d’utiliser circle() ou ellipse() à cette fin.

void QCanvasPainter::arc(QPointF centerPoint, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = PathWinding::ClockWise, QCanvasPainter::PathConnection connection = PathConnection::Connected)

Crée un nouveau sous-trajet en forme d’arc de cercle. Le centre de l’arc se trouve à l’adresse centerPoint, avec radius, et l’arc est tracé de l’angle a0 à a1, et balayé selon direction (ClockWise ou CounterClockWise). Lorsque connection vaut NotConnected, l’arc n’ajoute pas de ligne entre la position du tracé précédent et le début de l’arc. Les angles sont spécifiés en radians.

Remarque : alors que le contexte 2D HTML canvas utilise la fonction arc() pour dessiner des cercles, avec QCanvasPainter, il est recommandé d'utiliser circle() ou ellipse() à cette fin.

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

void QCanvasPainter::arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius)

Ajoute un segment d'arc au niveau du coin défini par le dernier point du tracé, ainsi que deux points spécifiés (x1, y1 et x2, y2) avec radius. L'arc est automatiquement relié au dernier point du tracé par une ligne droite si nécessaire.

Trajet en forme de crochet comportant un segment supérieur horizontal, une grande courbe arrondie et une petite boucle à l'extrémité
p->beginPath();
p->moveTo(20, 20);
p->arcTo(240, 20, 20, 220, 50);
p->arcTo(20, 220, 20, 20, 30);
p->stroke();

void QCanvasPainter::arcTo(QPointF controlPoint1, QPointF controlPoint2, qreal radius)

Ajoute un segment d'arc à l'angle défini par le dernier point du tracé et deux points spécifiés (controlPoint1 et controlPoint2) avec radius. L'arc est automatiquement relié au dernier point du tracé par une ligne droite si nécessaire.

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

void QCanvasPainter::beginHoleSubPath()

Créer un sous-chemin « hole ». Cela revient à utiliser la commande setPathWinding(QCanvasPainter::PathWinding::ClockWise))

Cercle vert percé d'un trou carré dans lequel se trouve un cercle vert plein plus petit
p->beginPath();
p->circle(100, 100, 80);
p->beginHoleSubPath();
p->rect(60, 60, 80, 80);
p->beginSolidSubPath();
p->circle(100, 100, 20);
p->fill();
p->stroke();

Voir également beginSolidSubPath().

void QCanvasPainter::beginPath()

Commence à tracer un nouveau chemin tout en effaçant le chemin actuel.

void QCanvasPainter::beginSolidSubPath()

Lancer un sous-chemin solide. Cela revient à setPathWinding(QCanvasPainter::PathWinding::CounterClockWise))

Voir également beginHoleSubPath().

void QCanvasPainter::bezierCurveTo(qreal cp1X, qreal cp1Y, qreal cp2X, qreal cp2Y, qreal x, qreal y)

Ajoute un segment de Bézier cubique partant du dernier point du tracé, passant par deux points de contrôle (cp1X, cp1Y et cp2X, cp2Y) et aboutissant au point spécifié (x, y).

Courbe de Bézier cubique lisse en forme de S
p->beginPath();
p->moveTo(20, 20);
p->bezierCurveTo(150, 50, 50, 250, 180, 120);
p->stroke();

void QCanvasPainter::bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)

Ajoute un segment de Bézier cubique partant du dernier point du tracé, passant par deux points de contrôle (controlPoint1 et controlPoint2) et aboutissant au point spécifié endPoint.

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

void QCanvasPainter::circle(qreal centerX, qreal centerY, qreal radius)

Crée un nouveau sous-tracé circulaire centré en ( centerX, centerY) et d'un radius.

Cercle vert avec un contour bleu sarcelle foncé
p->beginPath();
p->circle(100, 100, 80);
p->fill();
p->stroke();

void QCanvasPainter::circle(QPointF centerPoint, qreal radius)

Crée un nouveau sous-trajet circulaire centré sur centerPoint avec radius.

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

void QCanvasPainter::cleanupResources()

Programme la suppression des textures inutilisées du cache.

De plus, d'autres caches et pools peuvent être réduits lors de l'appel de cette fonction, afin de minimiser l'utilisation de la mémoire. Cela peut potentiellement entraîner des appels de dessin plus coûteux par la suite.

void QCanvasPainter::clearRect(qreal x, qreal y, qreal width, qreal height)

Efface les pixels d'une zone rectangulaire en remplissant de noir transparent le rectangle défini par x, y, width, height. Comme l'effacement ne nécessite pas de fusion, il peut s'avérer plus rapide que fillRect().

Cercle vert dont la partie supérieure a été effacée pour former une encoche rectangulaire verticale
p->beginPath();
p->circle(100, 100, 80);
p->fill();
p->stroke();
p->clearRect(60, 0, 80, 120);

void QCanvasPainter::clearRect(const QRectF &rect)

Efface les pixels d'une zone rectangulaire en remplissant le rectangle spécifié par ` rect ` avec du noir transparent. Il s'agit d'une méthode surchargée utilisant ` QRectF`.

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

void QCanvasPainter::closePath()

Ferme le sous-trajet actuel à l'aide d'un segment de droite. Cela revient à utiliser « lineTo([point de départ]) » comme dernier élément du trajet.

QCanvasOffscreenCanvas QCanvasPainter::createCanvas(QSize pixelSize, int sampleCount = 1, QCanvasOffscreenCanvas::Flags flags = {})

Renvoie un nouveau canevas hors écran avec les paramètres pixelSize, sampleCount et flags fournis.

La taille du canevas est spécifiée en pixels. Les propriétés pixelSize, sampleCount et flags sont ensuite immuables. Pour obtenir un canevas avec une taille, un nombre d’échantillons ou des indicateurs différents, créez-en un nouveau.

Pour cibler un canevas hors écran avec des commandes de dessin, appelez la surcharge appropriée de ` QCanvasRhiPaintDriver::beginPaint()` lorsque vous utilisez l’API de bas niveau, ou ` QCanvasPainterWidget::beginCanvasPainting()` ou ` QCanvasPainterItemRenderer::beginCanvasPainting()` lorsque vous utilisez les classes de widgets de commodité ou d’éléments ` Qt Quick `.

Normalement, le contenu du canevas est effacé lors du dessin. Pour désactiver cette fonction, passez PreserveContents dans flags.

Pour demander un rendu multi-échantillonnage sur le canevas (anticrénelage multi-échantillonnage, MSAA), définissez un nombre d’échantillons supérieur à 1, par exemple 4 ou 8. La conservation du contenu du canevas entre les passes de rendu n’est toutefois pas prise en charge lorsque le multi-échantillonnage est activé, et l’indicateur ` PreserveContents ` ne fonctionnera pas dans ce cas.

Remarque : un canevas hors écran s'appuie sur une texture indépendante de la cible de rendu principale, et le rendu vers celui-ci s'effectue toujours avec un facteur d'échelle (rapport de pixels du périphérique) de 1. Par exemple, pour créer un canevas correspondant aux dimensions de rendu réelles d'un ` QCanvasPainterWidget`, transmettez ` size() * devicePixelRatio() ` à ` pixelSize`, car l'size() ion du widget correspond uniquement à la taille logique, sans inclure le facteur d'échelle.

void QCanvasPainter::destroyCanvas(QCanvasOffscreenCanvas &canvas)

Détruit les ressources associées à canvas. canvas devient alors null canvas.

Le « painter » effectue cette opération automatiquement lors de sa destruction. Par conséquent, l'appel de cette fonction n'est nécessaire que si l'on souhaite libérer immédiatement les ressources associées.

void QCanvasPainter::drawBoxShadow(const QCanvasBoxShadow &shadow)

Dessine une boîte shadow. L'ombre sera dessinée selon la position, la taille, la couleur, le flou, etc. définis par shadow. Il n'est pas nécessaire d'appeler beginPath() avant cette méthode.

Remarque : pour visualiser la zone couverte par drawBoxShadow(), définissez la variable d'environnement QCPAINTER_DEBUG_SHADOW_RECT.

Carré arrondi de couleur verte projetant une ombre portée gris clair sur tous ses côtés
QRectF rect(40, 40, 120, 120);
QRectF shadowRect = rect.translated(-2, 4);
QCanvasBoxShadow shadow(shadowRect);
shadow.setBlur(30);
p->drawBoxShadow(shadow);
p->beginPath();
p->roundRect(rect, 30);
p->setFillStyle("#2CDE85");
p->fill();

Voir également QCanvasBoxShadow.

void QCanvasPainter::drawImage(const QCanvasImage &image, qreal x, qreal y)

Afficher image sur x, y, à sa taille par défaut.

Logo Qt vert affiché à sa taille par défaut
static QImage logo(":/qt_logo.png");
QCanvasImage image = p->addImage(logo);
p->drawImage(image, 36, 36);

Voir également addImage().

void QCanvasPainter::drawImage(const QCanvasImage &image, const QRectF &destinationRect)

Affichez image en respectant la position et la taille de destinationRect.

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

Voir également addImage().

void QCanvasPainter::drawImage(const QCanvasImage &image, const QRectF &sourceRect, const QRectF &destinationRect)

Dessiner image avec la position et la taille de destinationRect, à partir de la zone sourceRect de l'image.

Lettre « Q » agrandie, extraite d'une partie du logo Qt
static QImage logo(":/qt_logo.png");
QCanvasImage image = p->addImage(logo);
QRectF sourceRect(20, 30, 54, 76);
QRectF destinationRect(0, 0, 200, 200);
p->drawImage(image, sourceRect, destinationRect);

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

Voir également addImage().

void QCanvasPainter::drawImage(const QCanvasImage &image, qreal x, qreal y, qreal width, qreal height)

Afficher image sur x, y, ainsi que sur les pages width et height.

Logo Qt vert étiré en hauteur pour s'adapter à une largeur et une hauteur personnalisées
static QImage logo(":/qt_logo.png");
QCanvasImage image = p->addImage(logo);
p->drawImage(image, 50, 0, 100, 200);

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

Voir également addImage().

void QCanvasPainter::ellipse(qreal centerX, qreal centerY, qreal radiusX, qreal radiusY)

Crée un nouveau sous-trajet en forme d'ellipse centré en ( centerX, centerY) avec radiusX et radiusY.

Une large ellipse verte avec un contour bleu sarcelle foncé
p->beginPath();
p->ellipse(100, 100, 80, 60);
p->fill();
p->stroke();

void QCanvasPainter::ellipse(const QRectF &rect)

Crée un nouveau sous-tracé en forme d'ellipse dans « rect ». Cette ellipse recouvrira la zone « rect ».

Contour d'une ellipse allongée insérée dans un rectangle vert rempli
QRectF rect(40, 20, 120, 160);
p->fillRect(rect);
p->beginPath();
p->ellipse(rect);
p->stroke();

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

void QCanvasPainter::ellipse(QPointF centerPoint, qreal radiusX, qreal radiusY)

Crée un nouveau sous-trajet en forme d'ellipse centré à l'centerPoint, avec les coordonnées radiusX et radiusY.

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

void QCanvasPainter::fill()

Remplit le tracé actuel avec le style de remplissage et la règle de remplissage actuels.

Deux barres vertes et un cercle vert fusionnés pour former une seule figure composite
p->beginPath();
p->rect(20, 20, 40, 160);
p->rect(140, 20, 40, 160);
p->circle(100, 100, 60);
p->fill();

Voir également setFillStyle() et setFillRule().

[since 6.12] void QCanvasPainter::fill(QCanvasPainter::FillRule fillRule)

Remplit le tracé actuel avec le style de remplissage actuel et la règle de remplissage fillRule.

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

Cette fonction a été introduite dans Qt 6.12.

Voir également setFillStyle() et setFillRule().

void QCanvasPainter::fill(const QCanvasPath &path, int pathGroup = -1)

Remplit l'objet « path » avec le style et la règle de remplissage actuels, et l'intègre à l'objet « pathGroup ». Le remplissage via « QCanvasPath » est optimal lorsque le tracé contient davantage de commandes et est essentiellement statique.

Lorsque pathGroup est défini sur -1, le tracé ne sera pas mis en cache côté GPU. Il s’agit du comportement par défaut. Pour demander la mise en cache des données de tracé, transmettez une valeur égale ou supérieure à 0. Vous trouverez plus d’informations sur l’utilisation des groupes de cache de tracés dans la documentation QCanvasPath.

Il n’est pas nécessaire d’appeler ` beginPath()` avant cette méthode.

Empilement de barres horizontales pleines de largeurs variables formant la silhouette d'un sablier
// m_path is QCanvasPath
if (m_path.isEmpty()) {
    for (int i = 0; i < 16; i++) {
        qreal w = 100 + 60 * sin(i);
        m_path.rect(100 - w * 0.5,
                    22 + i * 10,
                    w, 6);
    }
}
p->fill(m_path);

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

Voir également setFillStyle(), setFillRule() et removePathGroup().

[since 6.12] void QCanvasPainter::fill(const QCanvasPath &path, QCanvasPainter::FillRule fillRule, int pathGroup = -1)

Remplit l'path e avec le style et la règle de remplissage actuels fillRule

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

Cette fonction a été introduite dans Qt 6.12.

void QCanvasPainter::fillRect(qreal x, qreal y, qreal width, qreal height)

Dessine un rectangle rempli à l'emplacement spécifié ( x, y) avec les dimensions width, height.

Remarque : cette fonction est fournie à titre de commodité. Lorsque vous souhaitez remplir plusieurs rectangles, il est préférable d’utiliser rect().

Carré rempli de vert uni
p->fillRect(20, 20, 160, 160);
// The above code does same as:
//  p->beginPath();
//  p->rect(20, 20, 160, 160);
//  p->fill();

void QCanvasPainter::fillRect(const QRectF &rect)

Dessine un rectangle rempli dans ` rect`. Il s'agit d'une méthode surchargée utilisant ` QRectF`.

Remarque : cette méthode est fournie à titre de commodité. Lorsque vous souhaitez remplir plusieurs rectangles, préférez utiliser ` rect()`.

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

void QCanvasPainter::fillText(const QString &text, qreal x, qreal y, qreal maxWidth = 0)

Dessine une chaîne de caractères de type « text » à l'emplacement spécifié ( x, y), en utilisant les valeurs actuelles de textAlign et textBaseline. Pour que le texte s'affiche sur plusieurs lignes, définissez le mode de retour à la ligne à l'aide de la fonction setTextWrapMode() en choisissant une valeur autre que la valeur par défaut NoWrap. Le paramètre facultatif maxWidth prend par défaut la valeur 0. Cela signifie que lorsque, par exemple, WordWrap a été défini, le texte est renvoyé à la ligne à chaque mot. Définissez le paramètre maxWidth sur la largeur de ligne souhaitée en pixels.

p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QString text("Qt Canvas Painter");
p->fillText(text, 100, 30);
p->setTextWrapMode(QCanvasPainter::WrapMode::WordWrap);
p->fillText(text, 100, 90);
p->fillText(text, 100, 160, 120);

Voir également setTextAlign(), setTextBaseline() et setTextWrapMode().

void QCanvasPainter::fillText(const QString &text, const QRectF &rect)

Dessine la chaîne text à l'intérieur de rect, en utilisant les valeurs actuelles de textAlign et textBaseline. La largeur du paramètre rect est utilisée comme maxWidth.

Il s’agit d’une méthode surchargée utilisant ` QRectF`. Il est souvent utile de définir la ligne de base du texte sur ` TextBaseline::Top ` ou ` TextBaseline::Middle ` lors du tracé de texte avec cette méthode.

p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QString text("Qt Canvas Painter");
QRectF rect1(10, 20, 180, 50);
p->strokeRect(rect1);
p->fillText(text, rect1);
p->setTextWrapMode(QCanvasPainter::WrapMode::WordWrap);
QRectF rect2(60, 90, 80, 90);
p->strokeRect(rect2);
p->fillText(text, rect2);

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

Voir également setTextAlign(), setTextBaseline() et setTextWrapMode().

void QCanvasPainter::fillText(const QString &text, QPointF point, qreal maxWidth = 0)

Affiche la chaîne « text » à l’ point spécifiée, en utilisant les paramètres actuels textAlign et textBaseline. Pour que le texte s’affiche sur plusieurs lignes, définissez le mode de retour à la ligne à l’aide de la fonction setTextWrapMode() en choisissant une valeur différente de la valeur par défaut « NoWrap ». Le paramètre facultatif « maxWidth » prend par défaut la valeur « 0 ». Cela signifie que lorsque, par exemple, la valeur « WordWrap » a été définie, le texte passe à la ligne à chaque mot. Définissez le paramètre ` maxWidth ` sur la largeur de ligne souhaitée en pixels.

Il s’agit d’une méthode surchargée utilisant QPointF.

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

Voir également setTextAlign(), setTextBaseline() et setTextWrapMode().

QTransform QCanvasPainter::getTransform() const

Renvoie la transformation actuelle.

void QCanvasPainter::lineTo(qreal x, qreal y)

Ajoute un segment de droite reliant le dernier point du tracé au point ( x, y).

Deux segments de droite qui se rejoignent en un point pour former un angle
p->beginPath();
p->moveTo(20, 20);
p->lineTo(140, 180);
p->lineTo(180, 120);
p->stroke();

void QCanvasPainter::lineTo(QPointF point)

Ajoute un segment de droite reliant le dernier point du tracé à l'point.

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

void QCanvasPainter::moveTo(qreal x, qreal y)

Crée un nouveau sous-chemin dont le premier point est ( x, y).

void QCanvasPainter::moveTo(QPointF point)

Lance un nouveau sous-chemin dont le premier point est point.

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

void QCanvasPainter::quadraticCurveTo(qreal cpX, qreal cpY, qreal x, qreal y)

Ajoute un segment de Bézier quadratique partant du dernier point du tracé, passant par un point de contrôle (cpX, cpY) et aboutissant au point spécifié (x, y).

Forme de feuille verte pointue constituée de deux courbes quadratiques
p->beginPath();
p->moveTo(20, 20);
p->quadraticCurveTo(150, 50, 180, 180);
p->quadraticCurveTo(20, 220, 20, 20);
p->fill();
p->stroke();

void QCanvasPainter::quadraticCurveTo(QPointF controlPoint, QPointF endPoint)

Ajoute un segment de Bézier quadratique reliant le dernier point du tracé, en passant par un point de transition ( controlPoint ), au point de destination ( endPoint) spécifié.

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

void QCanvasPainter::rect(qreal x, qreal y, qreal width, qreal height)

Crée un nouveau sous-trajet de forme rectangulaire à la position x, y, de taille width, height.

Carré vert plein avec un contour bleu sarcelle foncé
p->beginPath();
p->rect(20, 20, 160, 160);
p->fill();
p->stroke();

void QCanvasPainter::rect(const QRectF &rect)

Crée un nouveau sous-trajet de forme rectangulaire à l'adresse rect. Il s'agit d'une méthode surchargée utilisant QRectF.

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

void QCanvasPainter::removeImage(const QCanvasImage &image)

Libère les ressources associées à ` image ` et supprime l'image du « painter ».

Remarque : il n'est généralement pas nécessaire d'appelercette fonction , car les ressources telles que les textures sont de toute façon libérées dans le destructeur du « painter ». Cette fonction est utile lorsqu'il est nécessaire de réduire l'utilisation de la mémoire en raison d'un grand nombre d'images, dont certaines ne sont plus utilisées.

Remarque : les imagessupprimées ne peuvent plus être utilisées dans les opérations de peinture.

Remarque : les ressources telles que les textures créées avec l’API 3D sous-jacente peuvent ne pas être libérées immédiatement. Ces opérations peuvent être reportées aux images suivantes, généralement lorsque cet QCanvasPainter recommence à dessiner après que l’ensemble actif d’appels de dessin a été soumis.

Voir également ` addImage()`.

void QCanvasPainter::removePathGroup(int pathGroup)

Supprime l'pathGroup du cache du peintre. L'appel de ` fill()` ou ` stroke()` pour ` pathGroup ` après cette opération régénérera le chemin dans le cache du groupe.

Remarque : il n’est normalement pas nécessaire d’appelercette méthode , car les chemins sont supprimés dans le destructeur du peintre. Ne l’utilisez que pour réduire l’utilisation de la mémoire lorsque pathGroup n’est plus nécessaire ou, par exemple, lorsque le chemin contient beaucoup moins de commandes qu’auparavant et que la taille du tampon doit être réduite.

Voir également fill() et stroke().

void QCanvasPainter::reset()

Réinitialise l'état actuel du peintre aux valeurs par défaut.

Cela inclut les styles de trait et de remplissage ainsi que les propriétés associées, la matrice de transformation, la zone de découpe, les paramètres liés au texte, les propriétés de composition, la pile d'états de dessin et les paramètres d'anticrénelage.

Remarque : cette méthode diffère de la méthode reset() du contexte 2D HTML Canvas en ce qu’elle n’efface pas visuellement les tampons du canevas.

Remarque : les valeurs de ` setWindingEnforce()` et ` setHighQualityStroking()` ne sont pas modifiées.

Rectangle arrondi vert pivoté au-dessus d'un carré noir rempli et d'un carré au trait dessiné après la réinitialisation
// Adjust the paint state
p->setStrokeStyle("#00414A");
p->setFillStyle("#2CDE85");
p->setLineWidth(10);
QRectF rect(20, 40, 160, 50);
p->translate(rect.center());
p->rotate(qDegreesToRadians(-25));
p->translate(-rect.center());
p->beginPath();
p->roundRect(rect, 20);
p->fill();
p->stroke();
// Reset to default paint state
p->reset();
p->fillRect(20, 140, 60, 40);
p->strokeRect(120, 140, 60, 40);

Voir également save() et restore().

void QCanvasPainter::resetClipping()

Réinitialise et désactive l'écrêtage.

Voir aussi setClipRect().

void QCanvasPainter::resetTransform()

Réinitialise la transformation actuelle pour qu'elle corresponde à une matrice identité.

void QCanvasPainter::restore()

Affiche et restaure l'état de rendu actuel. L'état précédemment enregistré sera donc restauré. Si la fonction save() n'a pas été appelée et que la pile d'états est vide, l'appel de cette fonction n'a aucun effet.

Voir également save().

void QCanvasPainter::rotate(qreal angle)

Fait pivoter le système de coordonnées actuel dans le sens des aiguilles d'une montre d'un angle de angle.

L'angle est exprimé en radians. Utilisez la fonction qDegreesToRadians() pour convertir les degrés en radians.

Rectangle arrondi vert pivoté à 45 degrés, avec le texte « Cute ! » pivoté le long de celui-ci
QRectF rect(20, 70, 160, 60);
p->translate(rect.center());
p->rotate(-M_PI / 4);
p->translate(-rect.center());
p->beginPath();
p->roundRect(rect, 10);
p->fill();
p->stroke();
p->setFillStyle(QColorConstants::Black);
p->fillText("Cute!", rect);

void QCanvasPainter::roundRect(qreal x, qreal y, qreal width, qreal height, qreal radius)

Crée un nouveau sous-tracé en forme de rectangle arrondi à la position x, y avec les dimensions width, height. L'arrondi des coins sera de radius.

Carré arrondi vert avec un contour bleu sarcelle foncé
p->beginPath();
p->roundRect(20, 20, 160, 160, 30);
p->fill();
p->stroke();

void QCanvasPainter::roundRect(const QRectF &rect, qreal radius)

Crée un nouveau sous-trajet en forme de rectangle arrondi à l'adresse rect avec des coins définis par radius. Il s'agit d'une méthode surchargée utilisant QRectF.

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

void QCanvasPainter::roundRect(const QRectF &rect, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)

Crée un nouveau sous-tracé en forme de rectangle arrondi à l'adresse rect. Le niveau d'arrondi des coins peut varier d'un coin à l'autre, avec les paramètres suivants : radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft.

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

void QCanvasPainter::roundRect(qreal x, qreal y, qreal width, qreal height, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)

Crée un nouveau sous-trajet en forme de rectangle arrondi à la position x, y avec les dimensions width, height. L'arrondi des coins peut varier d'un coin à l'autre, avec les valeurs radiusTopLeft, radiusTopRight, radiusBottomRight, radiusBottomLeft.

Carré vert dont le coin supérieur gauche est pointu et dont les trois autres coins sont arrondis avec des rayons différents
p->beginPath();
p->roundRect(20, 20, 160, 160,
             0, 40, 20, 80);
p->fill();
p->stroke();

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

void QCanvasPainter::save()

Ajoute et enregistre l'état de rendu actuel dans une pile d'états. Il faut utiliser la méthode correspondante restore() pour restaurer cet état.

Deux contours rectangulaires entre lesquels se trouve un rectangle légèrement pivoté
p->strokeRect(20, 20, 160, 40);
// Save and adjust the paint state
p->save();
p->setStrokeStyle(QColorConstants::Black);
p->setLineWidth(3);
p->rotate(0.1);
p->strokeRect(20, 80, 180, 20);
// Restore the saved paint state
p->restore();
p->strokeRect(20, 140, 160, 40);

Voir également restore().

void QCanvasPainter::scale(qreal scale)

Mise à l'échelle du système de coordonnées actuel selon le rapport scale. Les coordonnées x et y sont mises à l'échelle de manière uniforme.

Des contours de carrés imbriqués qui rétrécissent vers le centre par des changements d'échelle répétés
QRectF rect(20, 20, 160, 160);
for (int i = 0; i < 20; i++) {
    p->beginPath();
    p->roundRect(rect, 10);
    p->stroke();
    p->translate(rect.center());
    p->scale(0.8);
    p->translate(-rect.center());
}

void QCanvasPainter::scale(qreal scaleX, qreal scaleY)

Redimensionne le système de coordonnées actuel selon les valeurs scaleX et scaleY.

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

void QCanvasPainter::setAntialias(qreal antialias)

Définit le niveau d'anticrénelage actuel à antialias en pixels. Un anticrénelage plus important permet un rendu plus lisse. Cela n'affecte que le remplissage et le tracé, et non les images ou les textes. La valeur par défaut est 1.0 et la valeur maximale est 10.0.

L'anticrénelage peut être modifié pour chaque tracé ; il peut donc être défini avant chaque trait ou remplissage. Pour désactiver l'anticrénelage et réduire le coût de rendu, définissez l'anticrénelage sur 0.

Série de lignes ondulées dont le tracé s'adoucit et s'estompe progressivement à mesure que le niveau d'anticrénelage augmente
p->setLineWidth(6);
for (int i = 1; i < 10 ; i++) {
    int y = i * 20;
    p->setAntialias(i);
    p->beginPath();
    p->moveTo(20, y);
    p->bezierCurveTo(80, y + 20, 120,
                     y - 20, 180, y);
    p->stroke();
}

Voir également setTextAntialias().

void QCanvasPainter::setClipRect(qreal x, qreal y, qreal width, qreal height)

Définit le rectangle de découpe actuel sur (x, y, width, height). Le rectangle de découpe est transformé par la transformation actuelle.

Remarque : le découpage a un certain coût en termes de performances et ne doit être utilisé qu’en cas de nécessité.

Un quart de cercle vert et le texte « Clip me » découpés dans une zone carrée
QRectF viewArea(20, 20, 160, 160);
p->setClipRect(viewArea);
p->beginPath();
p->circle(40, 40, 110);
p->fill();
p->setFillStyle(Qt::black);
p->fillText("Clip me...", 40, 100);
p->strokeRect(viewArea);

Voir également resetClipping().

void QCanvasPainter::setClipRect(const QRectF &rect)

Définit le rectangle de découpe actuel sur rect. Le rectangle de découpe est transformé par la transformation actuelle.

Remarque : le découpage a un certain coût en termes de performances et ne doit être utilisé qu’en cas de nécessité.

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

Voir également resetClipping().

[since 6.12] void QCanvasPainter::setFillRule(QCanvasPainter::FillRule fillRule)

Définit la règle de remplissage des chemins sur « fillRule ». Cette valeur s'applique à tous les appels à la fonction fill() effectués après la définition de la règle. La règle de remplissage par défaut est QCanvasPainter::FillRule::NonZero

Deux étoiles vertes à cinq branches qui se chevauchent, l'une pleine et l'autre ajourée au centre
auto paintStar = [p]() {
    p->beginPath();
    p->moveTo(120, 60);
    for (int i = 1; i < 6; ++i) {
        p->lineTo(60 + 60 * cos(0.8 * i * M_PI),
                  60 + 60 * sin(0.8 * i * M_PI));
    }
    p->fill();
    p->stroke();
};
p->setFillRule(QCanvasPainter::FillRule::NonZero);
paintStar();
p->translate(75, 75);
p->setFillRule(QCanvasPainter::FillRule::EvenOdd);
paintStar();

Cette fonction a été introduite dans Qt 6.12.

void QCanvasPainter::setFillStyle(QColor color)

Définit le style de remplissage sur une couleur unie color. Le style de remplissage par défaut est le noir uni (0, 0, 0, 1).

Carrés concentriques remplis de noir, de bleu sarcelle foncé et de vert
p->setFillStyle(QColorConstants::Black);
p->fillRect(20, 20, 160, 160);
p->setFillStyle(QColor(0, 65, 74));
p->fillRect(40, 40, 120, 120);
p->setFillStyle("#2CDE85");
p->fillRect(60, 60, 80, 80);

void QCanvasPainter::setFillStyle(const QCanvasBrush &brush)

Définit le style de remplissage sur « brush ». Le style de remplissage par défaut est le noir uni (0, 0, 0, 1).

Carré vert présentant un dégradé radial qui s'estompe vers un bleu sarcelle foncé sur les bords
QCanvasRadialGradient g2(140, 40, 0, 300);
g2.setStartColor(QColor(44, 222, 133));
g2.setEndColor(QColor(0, 65, 74));
p->setFillStyle(g2);
p->fillRect(20, 20, 160, 160);
g2.setCenterPosition(100, 100);
p->setFillStyle(g2);
p->fillRect(40, 40, 120, 120);

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

void QCanvasPainter::setFont(const QFont &font)

Définit la police « font » comme police actuellement active.

void QCanvasPainter::setGlobalAlpha(qreal alpha)

Définit la valeur globale de l'alpha (transparence) sur alpha. Cette valeur d'alpha s'applique à toutes les formes affichées. Les tracés déjà transparents deviendront également proportionnellement plus transparents. La valeur de l'alpha doit être comprise entre 0,0 (entièrement transparent) et 1,0 (entièrement opaque). Par défaut, l'alpha est défini sur 1.0.

Quatre logos Qt sur des carreaux verts, dont la transparence augmente progressivement jusqu'à devenir totalement transparents sur toute la grille
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal y = 100 * (i / 2);
    QRectF rect(x, y, 100, 100);
    p->setGlobalAlpha(1.0 - i * 0.3);
    p->fillRect(rect);
    p->drawImage(image, rect);
}

void QCanvasPainter::setGlobalBrightness(qreal value)

Définit la luminosité globale à value. Cette luminosité s'applique à toutes les formes affichées. Une valeur de 0 rendra l'affichage entièrement noir. La valeur peut également être supérieure à 1,0 pour augmenter la luminosité. Par défaut, la luminosité est de 1.0.

Quatre logos Qt sur des carreaux verts dont la teinte s'assombrit progressivement, passant du vert vif au presque noir, sur toute la grille
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal y = 100 * (i / 2);
    QRectF rect(x, y, 100, 100);
    p->setGlobalBrightness(1.5 - i * 0.45);
    p->fillRect(rect);
    p->drawImage(image, rect);
}

void QCanvasPainter::setGlobalCompositeOperation(QCanvasPainter::CompositeOperation operation)

Définit le mode d'opération composite global sur « operation ». Ce mode s'applique à toutes les opérations de dessin. Le mode par défaut est « QCanvasPainter::CompositeOperation::SourceOver ».

Remarque : pour fonctionner correctement, les modes composites nécessitent l'activation de « alphaBlending » et l'utilisation d'un fond transparent pour le canevas.

QList<QCanvasPainter::CompositeOperation> modes = {
    QCanvasPainter::CompositeOperation::SourceOver,
    QCanvasPainter::CompositeOperation::SourceAtop,
    QCanvasPainter::CompositeOperation::DestinationOut
};
for (int i = 0; i < modes.size(); i++) {
    // First item - SourceOver mode
    p->setGlobalCompositeOperation(QCanvasPainter::CompositeOperation::SourceOver);
    qreal y = 5 + i * 65;
    p->setFillStyle("#D9F720");
    p->fillRect(20, y, 140, 40);
    // Second item - Different modes
    p->setGlobalCompositeOperation(modes[i]);
    p->beginPath();
    p->ellipse(130, y + 30, 60, 25);
    p->setStrokeStyle("#00414A");
    p->setFillStyle("#2CDE85");
    p->fill();
    p->stroke();
}

void QCanvasPainter::setGlobalContrast(qreal value)

Définit le contraste global à value. Ce contraste s'applique à toutes les formes affichées. Une valeur de 0 rendra l'affichage entièrement gris (0,5, 0,5, 0,5). La valeur peut également être supérieure à 1,0 pour augmenter le contraste. Par défaut, le contraste est de 1.0.

Quatre logos Qt sur des carreaux verts, allant d’un contraste élevé à un gris délavé
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal y = 100 * (i / 2);
    QRectF rect(x, y, 100, 100);
    p->setGlobalContrast(1.5 - i * 0.45);
    p->fillRect(rect);
    p->drawImage(image, rect);
}

void QCanvasPainter::setGlobalSaturation(qreal value)

Définit la saturation globale à value. Cette saturation s'applique à toutes les formes affichées. Une valeur de 0 désactive la saturation et rend l'affichage entièrement en niveaux de gris. La valeur peut également être supérieure à 1,0 pour augmenter la saturation. Par défaut, la saturation est de 1.0.

Quatre logos Qt sur des carreaux verts, dont les couleurs vives s'estompent progressivement pour passer au gris sur toute la grille
static QImage logo(":/qt_logo2.png");
QCanvasImage image = p->addImage(logo);
p->setFillStyle("#d9f720");
for (int i = 0; i < 4; i++) {
    qreal x = 100 * (i % 2);
    qreal y = 100 * (i / 2);
    QRectF rect(x, y, 100, 100);
    p->setGlobalSaturation(1.5 - i * 0.5);
    p->fillRect(rect);
    p->drawImage(image, rect);
}

void QCanvasPainter::setHighQualityStroking(bool enabled)

Définit le tracé de haute qualité sur « enabled ». Le réglage sur « true » permet un rendu plus correct dans certains cas peu courants où les tracés se chevauchent et ne présentent pas une opacité totale. L’activation de cette option entraîne une augmentation du coût de rendu. La valeur par défaut est « false ».

// Increase the line width and reduce opacity to get
// the stroking flaws visible.
p->setLineWidth(20);
p->setGlobalAlpha(0.5);
if (m_path.isEmpty()) {
    m_path.moveTo(30, 30);
    m_path.lineTo(40, 30);
    m_path.lineTo(80, 170);
    m_path.lineTo(80, 30);
    m_path.lineTo(70, 30);
}
p->setHighQualityStroking(true);
p->stroke(m_path);
p->setHighQualityStroking(false);
p->translate(90, 0);
p->stroke(m_path);

void QCanvasPainter::setLineCap(QCanvasPainter::LineCap cap)

Définit la fin de trait sur « cap ». La fin de trait par défaut est « QCanvasPainter::LineCap::Butt ».

Trois lignes horizontales présentant des extrémités de ligne à about, carrées et arrondies
QCanvasPath path;
path.moveTo(40, 60);
path.lineTo(160, 60);
p->setLineCap(QCanvasPainter::LineCap::Butt);
p->stroke(path, -1);
p->setLineCap(QCanvasPainter::LineCap::Square);
p->translate(0, 40);
p->stroke(path, -1);
p->setLineCap(QCanvasPainter::LineCap::Round);
p->translate(0, 40);
p->stroke(path, -1);

void QCanvasPainter::setLineJoin(QCanvasPainter::LineJoin join)

Définit le type de jonction des traits sur « join ». La jonction par défaut est « QCanvasPainter::LineJoin::Miter ».

Trois tracés en zigzag illustrant des assemblages en onglet, en biseau et arrondis
QCanvasPath path;
path.moveTo(40, 20);
path.lineTo(100, 80);
path.lineTo(160, 40);
path.lineTo(160, 70);
p->setLineJoin(QCanvasPainter::LineJoin::Miter);
p->stroke(path, -1);
p->setLineJoin(QCanvasPainter::LineJoin::Bevel);
p->translate(0, 50);
p->stroke(path, -1);
p->setLineJoin(QCanvasPainter::LineJoin::Round);
p->translate(0, 50);
p->stroke(path, -1);

Voir également setMiterLimit().

void QCanvasPainter::setLineWidth(qreal width)

Définit la largeur des traits à width en pixels. La largeur par défaut est 1.0. Lorsque l'anticrénelage est activé, les largeurs inférieures à un pixel entraînent automatiquement une diminution progressive de l'opacité, ce qui permet d'obtenir un rendu lisse.

Série de courbes ondulées dessinées avec des largeurs de trait progressivement croissantes
for (int i = 1; i < 10 ; i++) {
    int y = i * 20;
    p->setLineWidth(0.5 * i);
    p->beginPath();
    p->moveTo(20, y);
    p->bezierCurveTo(80, y + 20, 120,
                     y - 20, 180, y);
    p->stroke();
}

Voir aussi stroke().

void QCanvasPainter::setMiterLimit(qreal limit)

Définit la limite de coupe en onglet à limit. La limite de coupe en onglet détermine à quel moment un angle aigu est biseauté. Lorsque la longueur de l'angle dépasse cette limite, une coupe en onglet ( QCanvasPainter::LineJoin::Bevel ) est alors appliquée entre les lignes. Ce paramètre n'a d'effet qu'avec le type de jonction « QCanvasPainter::LineJoin::Miter ». La limite par défaut est 10.0.

QCanvasPath path;
path.moveTo(20, 40);
path.lineTo(30, 130);
path.lineTo(40, 40);
path.lineTo(55, 80);

p->setLineJoin(QCanvasPainter::LineJoin::Miter);
p->setMiterLimit(20);
p->stroke(path);

p->setMiterLimit(8);
p->translate(65, 0);
p->stroke(path);

p->setMiterLimit(2);
p->translate(65, 0);
p->stroke(path);

Voir également setLineJoin().

void QCanvasPainter::setPathWinding(QCanvasPainter::PathWinding winding)

Définit le sous-trajet actuel « winding » sur « CounterClockWise » (par défaut) ou « ClockWise ». L'option « CounterClockWise » permet de tracer des sous-trajets pleins, tandis que l'option « ClockWise » permet de tracer des trous.

Carré arrondi vert comportant un petit cercle et un rectangle découpés pour former des trous
p->beginPath();
p->roundRect(20, 20, 160, 160, 40);
p->setPathWinding(QCanvasPainter::PathWinding::ClockWise);
p->circle(140, 60, 20);
p->rect(60, 120, 80, 30);
p->fill();
p->stroke();

Voir également beginHoleSubPath() et beginSolidSubPath().

void QCanvasPainter::setStrokeStyle(QColor color)

Définit le style de trait sur « color » (couleur unie). Le style de trait par défaut est une couleur noire unie (0, 0, 0, 1).

Trois contours carrés imbriqués, respectivement en noir, bleu sarcelle foncé et vert
p->setStrokeStyle(QColorConstants::Black);
p->strokeRect(20, 20, 160, 160);
p->setStrokeStyle(QColor(0, 65, 74));
p->strokeRect(40, 40, 120, 120);
p->setStrokeStyle("#2CDE85");
p->strokeRect(60, 60, 80, 80);

void QCanvasPainter::setStrokeStyle(const QCanvasBrush &brush)

Définit le style de trait sur « brush ». Le style de trait par défaut est un trait noir continu (0, 0, 0, 1).

Deux contours carrés emboîtés, avec des dégradés diagonaux allant du vert au noir et du vert au jaune
QCanvasLinearGradient g1(180, 20, 20, 180);
g1.setStartColor(QColor(44, 222, 133));
g1.setEndColor(Qt::black);
p->setStrokeStyle(g1);
p->strokeRect(20, 20, 160, 160);
g1.setEndColor(Qt::yellow);
p->setStrokeStyle(g1);
p->strokeRect(40, 40, 120, 120);

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

void QCanvasPainter::setTextAlign(QCanvasPainter::TextAlign align)

Définit l'alignement horizontal du texte sur « align ». L'alignement par défaut est « QCanvasPainter::TextAlign::Start ».

Les étiquettes « Gauche », « Centre », « Droite », « Début » et « Fin » sont positionnées autour d'une ligne de référence verticale
QFont font("Titillium Web", 22);
p->setFont(font);
p->fillRect(100, 0, 1, 200);
p->setTextAlign(QCanvasPainter::TextAlign::Left);
p->fillText("Left", 100, 40);
p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->fillText("Center", 100, 70);
p->setTextAlign(QCanvasPainter::TextAlign::Right);
p->fillText("Right", 100, 100);
p->setTextAlign(QCanvasPainter::TextAlign::Start);
p->fillText("Start", 100, 130);
p->setTextAlign(QCanvasPainter::TextAlign::End);
p->fillText("End", 100, 160);

Voir également setTextBaseline().

void QCanvasPainter::setTextAntialias(qreal antialias)

Définit le niveau actuel d'anticrénelage du texte. La valeur « antialias » correspond à un multiplicateur de l'anticrénelage normal : ainsi, « 0.0 » désactive l'anticrénelage et « 2.0 » le double. La valeur par défaut est 1.0.

Remarque : en raison de la technique d’anticrénelage du texte utilisée (SDF), le niveau maximal d’anticrénelage est assez limité, ce qui a moins d’impact lorsque la taille de la police est petite.

Les lignes intitulées « Antialiasing 1.0 à 4.0 » deviennent progressivement plus floues et moins nettes
QFont font("Titillium Web", 20);
p->setFont(font);
p->setTextAntialias(1.0);
p->fillText("Antialiasing: 1.0", 100, 25);
p->setTextAntialias(2.0);
p->fillText("Antialiasing: 2.0", 100, 75);
p->setTextAntialias(3.0);
p->fillText("Antialiasing: 3.0", 100, 125);
p->setTextAntialias(4.0);
p->fillText("Antialiasing: 4.0", 100, 175);

void QCanvasPainter::setTextBaseline(QCanvasPainter::TextBaseline baseline)

Définit l'alignement vertical (ligne de base) du texte sur « baseline ». L'alignement par défaut est « QCanvasPainter::TextBaseline::Alphabetic ».

Étiquettes « Bas », « Milieu », « Haut », « Alphabétique » et « Suspendue », alignées sur des lignes de base horizontales
QFont font("Titillium Web", 16);
p->setFont(font);
p->fillRect(0, 60, 200, 1);
p->fillRect(0, 140, 200, 1);
p->setTextBaseline(QCanvasPainter::TextBaseline::Bottom);
p->fillText("Bottom", 40, 60);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
p->fillText("Middle", 100, 60);
p->setTextBaseline(QCanvasPainter::TextBaseline::Top);
p->fillText("Top", 160, 60);
p->setTextBaseline(QCanvasPainter::TextBaseline::Alphabetic);
p->fillText("Alphabetic", 50, 140);
p->setTextBaseline(QCanvasPainter::TextBaseline::Hanging);
p->fillText("Hanging", 150, 140);

Voir aussi setTextAlign().

void QCanvasPainter::setTextDirection(QCanvasPainter::TextDirection direction)

Définit le sens d'écriture du texte sur « direction ». Le sens par défaut est « QCanvasPainter::TextDirection::Inherit ».

p->setTextAlign(QCanvasPainter::TextAlign::Center);
p->setTextBaseline(QCanvasPainter::TextBaseline::Middle);
QFont font("Titillium Web", 32);
p->setFont(font);
p->setFillStyle(QColorConstants::Black);
p->fillText("Hi!", 100, 50);
p->setTextDirection(QCanvasPainter::TextDirection::RightToLeft);
p->fillText("Hi!", 100, 150);

void QCanvasPainter::setTextLineHeight(qreal height)

Définit l'ajustement de l'interligne en pixels sur height pour le texte en retour à la ligne. L'interligne par défaut est de 0.

Texte de deux lignes réparti dans trois encadrés, avec des hauteurs de ligne de -10, 0 et 10 pixels
QRectF r1(40, 5, 120, 60);
QRectF r2(40, 70, 120, 60);
QRectF r3(40, 135, 120, 60);
p->strokeRect(r1);
p->strokeRect(r2);
p->strokeRect(r3);
p->setTextLineHeight(-10);
p->fillText("Text with line height: -10", r1);
p->setTextLineHeight(0);
p->fillText("Text with line height: 0", r2);
p->setTextLineHeight(10);
p->fillText("Text with line height: 10", r3);

void QCanvasPainter::setTextWrapMode(QCanvasPainter::WrapMode wrapMode)

Définit le mode de retour à la ligne sur « wrapMode ». Le mode de retour à la ligne par défaut est « QCanvasPainter::WrapMode::NoWrap ».

La même chaîne dans trois cases : « sans retour à la ligne », « retour à la ligne automatique » et « retour à la ligne n'importe où »
QRectF r1(50, 5, 100, 60);
QRectF r2(50, 70, 100, 60);
QRectF r3(50, 135, 100, 60);
p->strokeRect(r1);
p->strokeRect(r2);
p->strokeRect(r3);
QString s("This is a long string.");
p->setTextWrapMode(QCanvasPainter::WrapMode::NoWrap);
p->fillText(s, r1);
p->setTextWrapMode(QCanvasPainter::WrapMode::Wrap);
p->fillText(s, r2);
p->setTextWrapMode(QCanvasPainter::WrapMode::WrapAnywhere);
p->fillText(s, r3);

void QCanvasPainter::setTransform(const QTransform &transform)

Réinitialise la transformation actuelle et utilise à la place transform.

Petit carré arrondi vert au-dessus d'un plus grand carré arrondi, pivoté et redimensionné
p->beginPath();
p->roundRect(80, 20, 40, 40, 10);
p->fill();
p->stroke();
QTransform t;
t.translate(100, 20);
t.rotate(45);
t.scale(2.0, 2.0);
p->setTransform(t);
p->beginPath();
p->roundRect(20, 20, 40, 40, 10);
p->fill();
p->stroke();

Voir aussi transform().

void QCanvasPainter::setWindingEnforce(bool enabled)

Définit le sens de défilement des chemins sur « enabled ». En définissant cette option sur « false », vous désactivez l'application du sens de défilement des chemins défini dans la fonction « setPathWinding() ». Cette désactivation permet, par exemple, de créer des trous dans les chemins en ajoutant les points dans le sens des aiguilles d'une montre. Elle peut également améliorer les performances. La valeur par défaut est « true ».

p->setWindingEnforce(false);
p->beginPath();
// Outer shape, counterclockwise
p->moveTo(20, 20);
p->lineTo(100, 180);
p->lineTo(180, 20);
p->closePath();
// Inner shape, clockwise
p->moveTo(100, 40);
p->lineTo(125, 90);
p->lineTo(75, 90);
p->closePath();
p->fill();
p->stroke();

void QCanvasPainter::skew(qreal angleX, qreal angleY = 0.0)

Déforme (cisaille) le système de coordonnées actuel de angleX le long de l'axe X et de angleY le long de l'axe Y. Les angles sont exprimés en radians.

Rectangle arrondi vert avec le texte « Cute ! », déformé en parallélogramme
QRectF rect(40, 70, 120, 60);
p->translate(rect.center());
p->skew(-0.6);
p->translate(-rect.center());
p->beginPath();
p->roundRect(rect, 10);
p->fill();
p->stroke();
p->setFillStyle(QColorConstants::Black);
p->fillText("Cute!", rect);

void QCanvasPainter::stroke()

Trace le tracé actuel avec le style de trait actuel.

Deux contours de barres verticales avec un contour de cercle qui les recouvre
p->beginPath();
p->rect(20, 20, 40, 160);
p->rect(140, 20, 40, 160);
p->circle(100, 100, 60);
p->stroke();

Voir aussi setStrokeStyle().

void QCanvasPainter::stroke(const QCanvasPath &path, int pathGroup = -1)

Trace le chemin path avec le style de trait actuel et l'intègre dans pathGroup. Le tracé via QCanvasPath est optimal lorsque le chemin contient davantage de commandes et est essentiellement statique.

Lorsque pathGroup est défini sur -1, les données liées au rendu du chemin ne sont pas mises en cache. Il s’agit du comportement par défaut. Pour demander la mise en cache des données du chemin, transmettez une valeur égale ou supérieure à 0. Vous trouverez plus d’informations sur l’utilisation des groupes de cache de chemins dans la documentation relative à QCanvasPath.

Il n’est pas nécessaire d’appeler ` beginPath()` avant cette méthode.

Série de contours de barres verticales étroites de hauteurs variables
// m_path is QCanvasPath
if (m_path.isEmpty()) {
    for (int i = 0; i < 16; i++) {
        int h = 100 + 60 * sin(i);
        m_path.rect(22 + i * 10,
                    180 - h,
                    6, h);
    }
}
p->stroke(m_path);

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

Voir également setStrokeStyle() et removePathGroup().

void QCanvasPainter::strokeRect(qreal x, qreal y, qreal width, qreal height)

Dessine un rectangle avec contour à l'emplacement spécifié ( x, y) et de taille width, height.

Remarque : cette fonction est fournie à titre de commodité. Lorsque vous tracez les contours de plusieurs rectangles, il est préférable d'utiliser rect().

Contour carré bleu sarcelle foncé
p->strokeRect(20, 20, 160, 160);
// The above code does same as:
// p->beginPath();
// p->rect(20, 20, 160, 160);
// p->stroke();

void QCanvasPainter::strokeRect(const QRectF &rect)

Dessine un rectangle avec un contour dans ` rect`. Il s'agit d'une méthode surchargée utilisant ` QRectF`.

Remarque : cette méthode est fournie à titre de commodité. Lorsque vous souhaitez tracer plusieurs rectangles, il est préférable d’utiliser ` rect()`.

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

QRectF QCanvasPainter::textBoundingBox(const QString &text, qreal x, qreal y, qreal maxWidth = 0) const

Mesure le cadre de délimitation d'une chaîne « text » à l'adresse (x, y).

Pour mesurer un texte sur plusieurs lignes, définissez le mode de retour à la ligne à l’aide de la fonction setTextWrapMode() sur une valeur autre que la valeur par défaut NoWrap. Définissez également le paramètre facultatif maxWidth sur la largeur de ligne souhaitée en pixels.

Renvoie QRectF avec les valeurs [xmin, ymin, width, height]. Les valeurs mesurées sont renvoyées dans l'espace de coordonnées local.

Texte créé avec Qt, affiché sur une ligne puis réparti sur deux lignes, chacune dans son cadre de délimitation mesuré
QString s("Built with Qt");
QPointF pos1(20, 20);
QRectF box1 = p->textBoundingBox(s, pos1);
p->strokeRect(box1);
p->fillText(s, pos1);
p->setTextWrapMode(QCanvasPainter::WrapMode::WordWrap);
p->setTextAlign(QCanvasPainter::TextAlign::Center);
QPointF pos2(100, 80);
QRectF box2 = p->textBoundingBox(s, pos2, 100);
p->strokeRect(box2);
p->fillText(s, pos2, 100);

QRectF QCanvasPainter::textBoundingBox(const QString &text, const QRectF &rect) const

Mesure le cadre de délimitation d'une chaîne de caractères de type « text » disponible à l'adresse rect. Renvoie un objet de type « QRectF » contenant les valeurs [xmin, ymin, width, height]. Les valeurs mesurées sont renvoyées dans l'espace de coordonnées local.

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

QRectF QCanvasPainter::textBoundingBox(const QString &text, QPointF point, qreal maxWidth = 0) const

Mesure le cadre de délimitation d'une chaîne « text » à l'adresse point.

Pour mesurer du texte sur plusieurs lignes, définissez le mode de retour à la ligne à l’aide de la fonction setTextWrapMode() sur une valeur autre que la valeur par défaut NoWrap. Définissez également le paramètre facultatif maxWidth sur la largeur de ligne souhaitée en pixels.

Renvoie QRectF avec les valeurs [xmin, ymin, width, height]. Les valeurs mesurées sont renvoyées dans l'espace de coordonnées local.

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

void QCanvasPainter::transform(const QTransform &transform)

Multiplie le système de coordonnées actuel par l'transform e spécifiée.

Dix barres vertes arrondies disposées en cercle par rotation répétée autour d'un centre
QTransform t;
t.translate(100, 100);
t.rotate(36);
t.translate(-100, -100);
for (int i = 0; i < 10; i++) {
    p->transform(t);
    p->beginPath();
    p->roundRect(80, 15, 40, 20, 10);
    p->fill();
    p->stroke();
}

Voir aussi setTransform().

void QCanvasPainter::translate(qreal x, qreal y)

Transforme le système de coordonnées actuel selon les fonctions x et y.

Deux rectangles arrondis verts identiques, dont celui du bas est décalé vers le bas d'une translation
auto paintRect = [p]() {
    p->beginPath();
    p->roundRect(20, 20, 160, 60, 10);
    p->fill();
    p->stroke();
};
paintRect();
p->translate(0, 100);
paintRect();

void QCanvasPainter::translate(QPointF point)

Translate le système de coordonnées actuel d'point.

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

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