Sur cette page

QCanvasPath Class

QCanvasPath est le format de chemin natif de QCanvasPainter. Plus....

En-tête : #include <QCanvasPath>
CMake : find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)
target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter)
Depuis : Qt 6.11
Statut : Aperçu technique

Fonctions publiques

QCanvasPath()
QCanvasPath(qsizetype commandsSize, qsizetype commandsDataSize = -1)
QCanvasPath(const QCanvasPath &path)
QCanvasPath(QCanvasPath &&other)
~QCanvasPath()
void addPath(const QCanvasPath &path, const QTransform &transform = QTransform())
void addPath(const QCanvasPath &path, qsizetype start, qsizetype count, const QTransform &transform = QTransform())
void arc(float centerX, float centerY, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)
void arc(QPointF centerPoint, float radius, float a0, float a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)
void arcTo(float x1, float y1, float x2, float y2, float radius)
void arcTo(QPointF point1, QPointF point2, float radius)
void beginHoleSubPath()
void beginSolidSubPath()
void bezierCurveTo(float cp1X, float cp1Y, float cp2X, float cp2Y, float x, float y)
void bezierCurveTo(QPointF controlPoint1, QPointF controlPoint2, QPointF endPoint)
void circle(float x, float y, float radius)
void circle(QPointF centerPoint, float radius)
void clear()
void closePath()
qsizetype commandsCapacity() const
qsizetype commandsDataCapacity() const
qsizetype commandsDataSize() const
qsizetype commandsSize() const
QPointF currentPosition() const
void ellipse(float x, float y, float radiusX, float radiusY)
void ellipse(const QRectF &rect)
bool isEmpty() const
void lineTo(QPointF point)
void lineTo(float x, float y)
void moveTo(QPointF point)
void moveTo(float x, float y)
QPointF positionAt(qsizetype index) const
void quadraticCurveTo(float cpX, float cpY, float x, float y)
void quadraticCurveTo(QPointF controlPoint, QPointF endPoint)
void rect(float x, float y, float width, float height)
void rect(const QRectF &rect)
void reserve(qsizetype commandsSize, qsizetype commandsDataSize)
void reserve(qsizetype commandsSize)
void roundRect(float x, float y, float width, float height, float radius)
void roundRect(float x, float y, float width, float height, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)
void roundRect(const QRectF &rect, float radius)
void roundRect(const QRectF &rect, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)
void setPathWinding(QCanvasPainter::PathWinding winding)
QCanvasPath sliced(qsizetype start, qsizetype count, const QTransform &transform = QTransform()) const
void squeeze()
void swap(QCanvasPath &other)
operator QVariant() const
QCanvasPath &operator=(QCanvasPath &&other)
QCanvasPath &operator=(const QCanvasPath &path)
bool operator!=(const QCanvasPath &lhs, const QCanvasPath &rhs)
bool operator==(const QCanvasPath &lhs, const QCanvasPath &rhs)

Description détaillée

Un chemin de peinture est un objet composé d'un certain nombre de blocs graphiques, tels que des rectangles, des ellipses, des lignes et des courbes. L'API QCanvasPath correspond à QCanvasPainter peinture de chemin, rendant facile l'ajustement du code entre la peinture directe ou la peinture dans un chemin. La raison principale d'utiliser QCanvasPath est d'éviter de recréer les chemins (statiques) et d'être capable de mettre en cache les buffers GPU des chemins.

Comparé à QPainterPath, QCanvasPath est plus optimisé pour le rendu avec moins de fonctionnalités pour comparer ou ajuster les chemins. En particulier :

  • Il n'y a pas de méthodes pour l'intersection ou la soustraction entre deux chemins.
  • Il n'y a pas de méthode pour traduire le chemin.
  • Il n'y a pas de méthode pour ajouter du texte.
  • La règle de remplissage est toujours WindingFill (non nulle), OddEvenFill n'est pas pris en charge.

D'un point de vue fonctionnel, QCanvasPath est plus similaire à HTML Canvas Path2D, avec quelques ajouts et l'API correspondant à QCanvasPainter.

PathGroups et mise en cache

Peindre des chemins à travers QCanvasPath permet au moteur de mettre en cache la géométrie du chemin (sommets). Cela améliore les performances des chemins statiques, tout en augmentant potentiellement la consommation de mémoire du GPU.

Lorsque l'on peint des chemins en utilisant fill() ou stroke() qui prennent QCanvasPath comme paramètre, il est possible de définir pathGroup comme second paramètre. Celui-ci définit le tampon du GPU où le chemin est mis en cache. Par défaut, pathGroup est 0, ce qui signifie que le premier tampon est utilisé. En définissant pathGroup à -1, le chemin n'alloue pas son propre tampon et le même tampon dynamique est utilisé comme pour la peinture directe en utilisant beginPath() suivi de commandes et de fill/stroke.

L'organisation des chemins en groupes de chemins permet d'optimiser efficacement les performances de rendu et l'utilisation de la mémoire du GPU. Les chemins qui se ressemblent et qui changent souvent en même temps doivent être dans le même groupe pour une utilisation optimale de la mémoire tampon.

Lorsque le chemin change, sa géométrie (tampon de sommets) est automatiquement mise à jour. Les éléments qui entraînent une mise à jour de la géométrie du groupe de chemins sont les suivants :

Notez que la modification de la transformation d'état (QCanvasPainter::transform(), QCanvasPainter::rotate() etc.) n'invalide pas le chemin, de sorte que le déplacement, la mise à l'échelle et la rotation d'un chemin mis en cache sont très efficaces.

Dans les cas où le chemin n'a plus besoin d'être peint, ou si l'application doit libérer la mémoire du GPU, le cache peut être libéré en appelant QCanvasPainter::removePathGroup(). Cela n'est généralement pas nécessaire, car les chemins mis en cache sont automatiquement libérés lors de la destruction du peintre.

Voir aussi QCanvasPainter::addPath() et QCanvasPainter::removePathGroup().

Documentation des fonctions membres

QCanvasPath::QCanvasPath()

Construit un chemin vide.

[explicit] QCanvasPath::QCanvasPath(qsizetype commandsSize, qsizetype commandsDataSize = -1)

Construit un chemin vide, en allouant de l'espace pour commandsSize quantité de commandes et optionnellement commandsDataSize quantité de données. Si le paramètre commandsDataSize n'est pas fourni, l'espace est automatiquement réservé pour la quantité de données 2 * commandsSize, qui est la quantité optimale lorsque les commandes du chemin sont des lignes droites (moveTo(), lineTo(), rect()).

La réservation d'un espace correct permet d'optimiser la création des chemins et l'utilisation de la mémoire. Elle n'est pas obligatoire car un espace suffisant est automatiquement garanti lors de l'ajout de commandes au chemin.

Voir également reserve().

QCanvasPath::QCanvasPath(const QCanvasPath &path)

Construit un chemin qui est une copie du chemin donné path.

QCanvasPath::QCanvasPath(QCanvasPath &&other)

Move-construit un nouveau QCanvasPath à partir de other.

[noexcept] QCanvasPath::~QCanvasPath()

Détruit le chemin.

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

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

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

Ajoute path au chemin actuel, en commençant par la commande start et en incluant le nombre de commandes count. Il est possible d'utiliser transform pour modifier les points du chemin. La plage de start et count est vérifiée, de sorte que les commandes ne sont pas accédées plus que QCanvasPath::commandsSize(). Au cas où le chemin ne devrait pas continuer à partir de la position actuelle du chemin, appeler d'abord moveTo() avec path.positionAt(start - 1).

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

Crée un arc centré sur QPointF(centerX, centerY) avec radius, commençant à un angle de a0 radians et se terminant à a1 radians. L'arc s'étend sur direction. Lorsque connection est NotConnected, le chemin précédent est fermé et un nouveau chemin secondaire est créé.

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

Crée un arc centré sur centerPoint avec radius, commençant à un angle de a0 radians et se terminant à a1 radians. L'arc s'étend sur direction. Lorsque connection est NotConnected, le chemin précédent est fermé et un nouveau chemin secondaire est créé.

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

void QCanvasPath::arcTo(float x1, float y1, float x2, float y2, float radius)

Crée un arc à partir des points QPointF(x1, y1) et QPointF(x2, y2) avec le point donné radius.

void QCanvasPath::arcTo(QPointF point1, QPointF point2, float radius)

Crée un arc à partir des points point1 et point2 avec le point donné radius.

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

void QCanvasPath::beginHoleSubPath()

Commencer un sous-chemin de trou. Ceci est équivalent à setPathWinding(QCanvasPainter::PathWinding::ClockWise))

Voir aussi beginSolidSubPath().

void QCanvasPath::beginSolidSubPath()

Commencer un sous-chemin solide. Ceci est équivalent à setPathWinding(QCanvasPainter::PathWinding::CounterClockWise))

Voir aussi beginHoleSubPath().

void QCanvasPath::bezierCurveTo(float cp1X, float cp1Y, float cp2X, float cp2Y, float x, float y)

Ajoute une courbe de Bézier cubique entre la position actuelle et le point final spécifié par x et y, en utilisant les points de contrôle spécifiés par cp1X, cp1Y, cp2X et cp2Y.

Après l'ajout de la courbe, la position actuelle est mise à jour pour se situer au point final de la courbe.

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

Ajoute une courbe de Bézier cubique entre la position actuelle et l'adresse endPoint à l'aide des points de contrôle spécifiés par controlPoint1, et controlPoint2.

Après l'ajout de la courbe, la position actuelle est mise à jour pour se trouver au point final de la courbe.

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

void QCanvasPath::circle(float x, float y, float radius)

Ajoute au chemin un cercle dont le centre se trouve à QPointF(x, y) et le point donné radius.

void QCanvasPath::circle(QPointF centerPoint, float radius)

Ajoute à la trajectoire un cercle dont le centre se trouve à centerPoint et dont l'adresse est radius.

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

void QCanvasPath::clear()

Efface les commandes et les données du chemin.

Appelez cette commande lorsque les commandes du chemin changent afin de recréer le chemin. Cela n'affecte pas l'utilisation de la mémoire, utilisez reserve() et squeeze() pour cela.

Voir aussi reserve() et squeeze().

void QCanvasPath::closePath()

Ferme le sous-chemin actuel en traçant une ligne jusqu'au début du sous-chemin, démarrant ainsi automatiquement un nouveau chemin.

qsizetype QCanvasPath::commandsCapacity() const

Renvoie la capacité des commandes dans le chemin.

Voir aussi commandsDataCapacity() et reserve().

qsizetype QCanvasPath::commandsDataCapacity() const

Renvoie la capacité des données de commandes dans le chemin.

Voir aussi commandsCapacity() et reserve().

qsizetype QCanvasPath::commandsDataSize() const

Renvoie la quantité de données de commande dans le chemin.

Par données de commande, on entend les points requis par les commandes.

Remarque : certains éléments du chemin nécessitent plusieurs points de données. Par exemple, closePath nécessite 0, moveTo et lineTo nécessitent 2, bezierCurveTo nécessite 6 et roundRect nécessite 34 points de données.

qsizetype QCanvasPath::commandsSize() const

Renvoie le nombre de commandes dans le chemin.

Remarque : certains éléments du chemin nécessitent plusieurs commandes. Par exemple, moveTo et lineTo nécessitent la commande 1, bezierCurveTo nécessite la commande 6 et roundRect 10 .

QPointF QCanvasPath::currentPosition() const

Renvoie la position actuelle du chemin. Il s'agit de la position où la commande de chemin précédente (moveTo, lineTo, bezierCurveTo etc.) s'est terminée. Si le chemin est vide, la valeur retournée est (0.0, 0.0).

void QCanvasPath::ellipse(float x, float y, float radiusX, float radiusY)

Crée une ellipse centrée sur (x, y), avec des rayons définis par radiusX, radiusY et l'ajoute au chemin en tant que sous-chemin fermé.

void QCanvasPath::ellipse(const QRectF &rect)

Crée une ellipse dans le rectangle rect et l'ajoute au chemin en tant que sous-chemin fermé.

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

bool QCanvasPath::isEmpty() const

Retourne vrai si le chemin est vide.

Voir aussi clear.

void QCanvasPath::lineTo(QPointF point)

Ajoute une ligne droite entre la position actuelle et la position donnée point. Une fois la ligne tracée, la position actuelle est mise à jour pour correspondre au point final de la ligne.

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

void QCanvasPath::lineTo(float x, float y)

Dessine une ligne depuis la position actuelle jusqu'au point (x, y).

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

void QCanvasPath::moveTo(QPointF point)

Déplace le point actuel sur le site point, en commençant implicitement un nouveau sous-chemin et en fermant le précédent.

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

void QCanvasPath::moveTo(float x, float y)

Déplace la position actuelle à (x, y) et démarre un nouveau sous-chemin, fermant implicitement le chemin précédent.

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

QPointF QCanvasPath::positionAt(qsizetype index) const

Renvoie la position du chemin à index. Cela signifie que la position où la commande du chemin (moveTo, lineTo, bezierCurveTo etc.) se trouve à index. L'index doit être compris entre 0 et commandsSize() - 1. Si le chemin est vide, le résultat est (0.0, 0.0).

void QCanvasPath::quadraticCurveTo(float cpX, float cpY, float x, float y)

Ajoute une courbe de Bézier quadratique entre le point actuel et le point final (x, y) avec le point de contrôle spécifié par (cpX, cpY).

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

Ajoute une courbe de Bézier quadratique entre la position actuelle et l'adresse endPoint avec le point de contrôle spécifié par controlPoint.

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

void QCanvasPath::rect(float x, float y, float width, float height)

Crée un rectangle positionné à QPointF(x, y) avec les données width et height.

void QCanvasPath::rect(const QRectF &rect)

Crée un rectangle spécifié par rect

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

void QCanvasPath::reserve(qsizetype commandsSize, qsizetype commandsDataSize)

Réserve une quantité donnée d'espace dans la mémoire interne de QCanvasPath.

Tente d'allouer de la mémoire pour au moins les commandes commandsSize et les points de données commandsDataSize. Certains éléments du chemin nécessitent plusieurs commandes, voir commandsSize() et commandsDataSize().

La réservation d'un espace correct permet d'optimiser la création des chemins et l'utilisation de la mémoire. Elle n'est pas obligatoire, car un espace suffisant est automatiquement garanti lors de l'ajout de commandes dans le chemin.

Voir également squeeze(), commandsCapacity() et commandsDataCapacity().

void QCanvasPath::reserve(qsizetype commandsSize)

Réserve une quantité donnée d'espace dans la mémoire interne de QCanvasPath.

Tente d'allouer de la mémoire pour au moins commandsSize commandes. Certains éléments du chemin nécessitent plusieurs commandes, voir commandsSize() et commandsDataSize().

L'espace est automatiquement réservé pour la quantité de données 2 * commandsSize, qui est la quantité optimale lorsque les commandes du chemin sont des lignes droites (moveTo(), lineTo(), rect()).

La réservation d'un espace correct permet d'optimiser la création des chemins et l'utilisation de la mémoire. Elle n'est pas obligatoire car l'espace suffisant est automatiquement assuré lors de l'ajout de commandes dans le chemin.

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

Voir aussi squeeze(), commandsCapacity(), et commandsDataCapacity().

void QCanvasPath::roundRect(float x, float y, float width, float height, float radius)

Ajoute au chemin le rectangle donné x, y, width, height avec des coins arrondis. Les coins sont des quarts de cercle avec la valeur radius.

void QCanvasPath::roundRect(float x, float y, float width, float height, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)

Ajoute au chemin le rectangle x, y, width, height avec des coins arrondis. Les coins sont des quarts de cercle de rayon radiusTopLeft, radiusTopRight radiusBottomRight et radiusBottomLeft, respectivement.

void QCanvasPath::roundRect(const QRectF &rect, float radius)

Ajoute au chemin le rectangle donné rect avec des coins arrondis. Les coins sont des quarts de cercle avec la valeur donnée radius.

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

void QCanvasPath::roundRect(const QRectF &rect, float radiusTopLeft, float radiusTopRight, float radiusBottomRight, float radiusBottomLeft)

Ajoute le rectangle rect aux coins arrondis à la trajectoire. Les coins sont des quarts de cercle de rayon radiusTopLeft, radiusTopRight radiusBottomRight et radiusBottomLeft, respectivement.

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

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

Définit le sous-chemin actuel winding en QCanvasPainter::CounterClockWise (par défaut) ou QCanvasPainter::ClockWise. CounterClockWise dessine des sous-chemins pleins tandis que ClockWise dessine des trous.

Note : Il s'agit d'une commande, similaire à lineTo, moveTo, etc., et par conséquent le réglage de l'enroulement doit être effectué avant le reste des commandes auxquelles l'enroulement modifié est censé s'appliquer.

QCanvasPath QCanvasPath::sliced(qsizetype start, qsizetype count, const QTransform &transform = QTransform()) const

Renvoie un nouveau chemin contenant les commandes de ce chemin, en commençant par la commande à start et en incluant la quantité de commandes à count, en utilisant éventuellement transform pour modifier les points du chemin.

L'intervalle entre start et count est vérifié, afin que les commandes ne soient pas accédées plus loin que commandsSize(). Si la commande à start n'est pas MoveTo, la première commande sera remplacée par MoveTo afin que cette tranche soit un chemin individuel.

void QCanvasPath::squeeze()

Libère la mémoire qui n'est pas nécessaire pour stocker les commandes et les données du chemin. Ceci peut être utilisé pour réduire l'utilisation de la mémoire après l'appel à reserve().

Normalement, cette fonction n'est pas nécessaire, mais elle peut être utile lorsque la taille du chemin a été importante en raison de la réservation ou de l'ajout de nombreux éléments (lineTo, bezierCurveTo etc.) et que l'on s'attend à ce que cette taille soit beaucoup plus petite à l'avenir. L'appel de reserve() puis de squeeze(), libère alors de la mémoire.

Voir aussi reserve().

[noexcept] void QCanvasPath::swap(QCanvasPath &other)

Remplace ce chemin par other. Cette opération est très rapide et n'échoue jamais.

QCanvasPath::operator QVariant() const

Retourne le chemin sous forme de QVariant.

[noexcept] QCanvasPath &QCanvasPath::operator=(QCanvasPath &&other)

Move-assigne other à cette instance QCanvasPath.

QCanvasPath &QCanvasPath::operator=(const QCanvasPath &path)

Affecte le site path à ce chemin et renvoie une référence à ce chemin.

Non-membres apparentés

[noexcept] bool operator!=(const QCanvasPath &lhs, const QCanvasPath &rhs)

Renvoie true si le chemin lhs est différent de rhs; false sinon.

Voir aussi operator==().

[noexcept] bool operator==(const QCanvasPath &lhs, const QCanvasPath &rhs)

Renvoie true si le chemin lhs est égal à rhs; false sinon.

Voir aussi operator!=().

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