QCanvasPath Class
QCanvasPath est le format de chemin natif d'QCanvasPainter. En savoir plus...
| En-tête : | #include <QCanvasPath> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS CanvasPainter) target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter) |
| Depuis : | Qt 6.11 |
Fonctions publiques
| QCanvasPath() | |
| QCanvasPath(qsizetype commandsSize, qsizetype commandsDataSize = -1) | |
| QCanvasPath(const QCanvasPath &path) | |
| QCanvasPath(QCanvasPath &&other) | |
| ~QCanvasPath() | |
(since 6.12) void | addPath(QStringView svgPath, const QTransform &transform = QTransform()) |
| 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 = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected) |
| void | arc(QPointF centerPoint, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected) |
| void | arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius) |
| void | arcTo(QPointF point1, QPointF point2, qreal radius) |
| void | beginHoleSubPath() |
| 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 x, qreal y, qreal radius) |
| void | circle(QPointF centerPoint, qreal radius) |
| void | clear() |
| void | closePath() |
| qsizetype | commandsCapacity() const |
| qsizetype | commandsDataCapacity() const |
| qsizetype | commandsDataSize() const |
| qsizetype | commandsSize() const |
| QPointF | currentPosition() const |
| void | ellipse(qreal x, qreal y, qreal radiusX, qreal radiusY) |
| void | ellipse(const QRectF &rect) |
| bool | isEmpty() const |
| void | lineTo(QPointF point) |
| void | lineTo(qreal x, qreal y) |
| void | moveTo(QPointF point) |
| void | moveTo(qreal x, qreal y) |
| QPointF | positionAt(qsizetype index) const |
| 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 | reserve(qsizetype commandsSize, qsizetype commandsDataSize = -1) |
| void | roundRect(qreal x, qreal y, qreal width, qreal height, qreal radius) |
| void | roundRect(qreal x, qreal y, qreal width, qreal height, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft) |
| void | roundRect(const QRectF &rect, qreal radius) |
| void | roundRect(const QRectF &rect, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal 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) |
Éléments non membres associés
| bool | operator!=(const QCanvasPath &lhs, const QCanvasPath &rhs) |
| bool | operator==(const QCanvasPath &lhs, const QCanvasPath &rhs) |
Description détaillée
Un tracé de dessin est un objet composé d’un certain nombre d’éléments graphiques, tels que des rectangles, des ellipses, des lignes et des courbes. L’API QCanvasPath correspond au tracé de dessin d’ QCanvasPainter, ce qui facilite l’adaptation du code entre le dessin direct et le dessin dans un tracé. La principale raison d’utiliser QCanvasPath est d’éviter de recréer des tracés statiques utilisés à chaque image du rendu, et de permettre éventuellement la mise en cache des données de rendu liées au tracé (telles que les données de sommets et d’index générées à partir de celui-ci), au lieu de les régénérer à chaque fois que le tracé est rempli ou tracé.
Par rapport à QPainterPath, QCanvasPath est davantage optimisé pour le rendu et propose moins de fonctionnalités de comparaison ou d’ajustement des chemins. En particulier :
- Il n’existe aucune méthode permettant l’intersection ou la soustraction entre deux chemins.
- Il n’existe aucune méthode permettant de translaté le tracé.
- Il n’existe aucune méthode permettant d’ajouter du texte.
Du point de vue des fonctionnalités, QCanvasPath s’apparente davantage à HTML Canvas Path2D, avec quelques ajouts et une API correspondant à celle de QCanvasPainter.
Groupes de chemins et mise en cache
Le tracé de chemins via 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 CPU et du GPU.
Lors du tracé de chemins à l’aide de fill() ou stroke() qui prennent QCanvasPath en paramètre, il est possible de définir un paramètre pathGroup en tant que deuxième paramètre.
Par défaut, pathGroup est défini sur -1, ce qui signifie que le système ne tentera pas de mettre en cache les données de tracé ; le rendu s'effectue donc de manière pratiquement identique à celui obtenu lors d'un tracé direct à l'aide de beginPath(), suivi de commandes de définition de tracé, puis d'un remplissage ou d'un contour.
Définir pathGroup sur la valeur 0 ou toute valeur supérieure activera la mise en cache et la réutilisation de la géométrie générée par le tracé. Regrouper les tracés permet d’optimiser efficacement les performances de rendu et l’utilisation de la mémoire. Les tracés qui vont de pair et changent souvent en même temps doivent être placés dans le même groupe pour obtenir des résultats optimaux.
Lorsque le tracé change, ses données, même si elles étaient mises en cache, sont automatiquement mises à jour. Les éléments qui provoquent une mise à jour de la géométrie du groupe de tracés sont les suivants :
- La suppression d’éléments du tracé ou l’ajout de nouveaux éléments.
- La modification de la largeur de trait (QCanvasPainter::setLineWidth(), applicable aux traits).
- Le réglage du niveau d’anticrénelage (QCanvasPainter::setAntialias(), applicable à la fois aux remplissages et aux contours).
- La modification du type de terminaison ou de jonction de ligne (QCanvasPainter::setLineCap(), QCanvasPainter::setLineJoin(), applicable aux contours).
- Modification de l'winding enforce (pertinent à la fois pour les remplissages et les contours).
- Modification de high quality stroking (pertinent à la fois pour les remplissages et les contours).
Notez que la modification de la transformation d’état (QCanvasPainter::transform(), QCanvasPainter::rotate() etc.) n’invalide pas le tracé ; par conséquent, le déplacement, la mise à l’échelle ou la rotation d’un tracé mis en cache sont très efficaces.
À titre d’exemple, considérons un QCanvasPath p contenant un très grand nombre de commandes. Le traçage ou le remplissage de ce tracé p peut s’avérer une opération coûteuse en ressources en raison de la charge de travail imposée au processeur. Les données de sommets peuvent être régénérées et chargées dans les tampons du GPU pour chacune de ces opérations de tracé ou de remplissage, à chaque image. Ce n’est pas idéal lorsque le tracé est statique et que l’on souhaite simplement le dessiner à plusieurs reprises à chaque image de la manière la plus efficace possible.
Lorsqu’un groupe de chemins est spécifié, par exemple en remplaçant stroke(p) par stroke(p, 5), le moteur de rendu a alors la possibilité de conserver des tampons de sommets et d’index dédiés pour le chemin p, ainsi que pour tout autre chemin ayant le même groupe (5) spécifié dans une commande de tracé ou de remplissage.
En supposant que le tracé p (les commandes dans le QCanvasPath) ne change pas, le remplissage ou le tracé répété de ce tracé deviendra une opération peu coûteuse, car toutes les données sont déjà présentes dans les tampons GPU dédiés au groupe de tracés 5. La transformation est également peu coûteuse, car avec les groupes de tracés mis en cache, les transformations s’effectuent dans le shader de sommets, et non sur la géométrie elle-même.
Dans l’extrait de code suivant, lorsque m_path est suffisamment complexe, que ses commandes ne changent pas et qu’il est tracé avec la même largeur de trait, le même niveau d’anticrénelage, etc. à chaque image, la solution suivante peut s’avérer nettement plus efficace que de ne pas utiliser de groupes de chemins :
// m_path is QCanvasPath with lots of commands in it
const int pathGroup = 5;
// in every frame:
painter->stroke(m_path, pathGroup);
// ... other draw commands
painter->translate(100, 0);
painter->stroke(m_path, pathGroup);
// ... other draw commandsLors du traçage d’ m_path, la deuxième, la troisième fois et les fois suivantes, le rendu sera très peu coûteux par rapport à une situation sans utilisation de groupes de chemins, car aucun traitement de la géométrie du chemin ne devra être effectué côté CPU. La modification de la transformation par application d’une translation n’invalide pas les données mises en cache des groupes de chemins ; par conséquent, l’appel à `stroke()` après translation est tout aussi rapide.
Que se passe-t-il si l’un des états mentionnés ci-dessus change ? Par exemple, si le tracé est dessiné avec deux largeurs de trait différentes :
// m_path is QCanvasPath with lots of commands in it
const int pathGroup = 5;
// in every frame:
painter->setStrokeWidth(4);
painter->stroke(m_path, pathGroup);
// ... other draw commands
painter->translate(100, 0);
painter->setStrokeWidth(8);
painter->stroke(m_path, pathGroup);
// ... other draw commandsCela reste très efficace, puisque les données des sommets du tracé seront mises en cache et réutilisées tant pour la largeur de trait de 4 que pour celle de 8, mais l’utilisation des ressources augmentera légèrement, car le tampon GPU dédié à l’ 5 des groupes de tracés contiendra désormais les deux versions de la géométrie du tracé, à savoir celles avec une largeur de trait de 4 et de 8.
On peut considérer les groupes de chemins comme un mécanisme de mise en cache où la valeur du groupe de chemins est traitée comme la clé du cache de premier niveau, tandis que l’objet QCanvasPath, le niveau d’anticrénelage, les indications de rendu et, en cas de tracé, la largeur de trait, la forme d’extrémité et la forme de jonction de ligne forment la clé du cache de deuxième niveau (au sein du groupe de chemins).
La modification des commandes de tracé (les éléments du QCanvasPath) est toujours coûteuse en ressources, car elle entraîne systématiquement la reconstruction des données associées tant du côté du processeur (CPU) que du processeur graphique (GPU). Pour prendre un exemple un peu extrême, si un QCanvasPath modifie ses commandes à chaque image, il est alors inutile d’utiliser des groupes de chemins (voire même QCanvasPath) pour ce chemin particulier, car cela n’apporte aucun avantage par rapport au tracé direct du chemin via les fonctions QCanvasPainter.
Dans les cas où le groupe de chemins ne sera plus utilisé pour le dessin, ou si l’application souhaite libérer autant de mémoire que possible, 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 l’appel du destructeur du peintre.
Voir également QCanvasPainter::addPath() et QCanvasPainter::removePathGroup().
Documentation des fonctions membres
QCanvasPath::QCanvasPath()
Crée un chemin vide.
[explicit] QCanvasPath::QCanvasPath(qsizetype commandsSize, qsizetype commandsDataSize = -1)
Crée un chemin vide, en allouant de l'espace pour un nombre de commandes défini par ` commandsSize ` et, éventuellement, pour un volume de données défini par ` commandsDataSize `. Si le paramètre ` commandsDataSize ` n'est pas fourni, de l'espace est automatiquement réservé pour le volume de données défini par ` 2 * commandsSize `, ce qui correspond à la quantité optimale lorsque les commandes du chemin sont des lignes droites (moveTo(), lineTo(), rect()).
La réservation d'un espace adéquat constitue une optimisation pour la création du chemin et l'utilisation de la mémoire. Elle n'est pas obligatoire, car un espace suffisant sera automatiquement garanti lors de l'ajout de commandes au chemin.
Voir également reserve().
QCanvasPath::QCanvasPath(const QCanvasPath &path)
Crée un chemin qui est une copie du chemin path.
[noexcept] QCanvasPath::QCanvasPath(QCanvasPath &&other)
Crée par « move » un nouvel objet `QCanvasPath` à partir de ` other`.
[noexcept] QCanvasPath::~QCanvasPath()
Supprime le chemin.
[since 6.12] void QCanvasPath::addPath(QStringView svgPath, const QTransform &transform = QTransform())
Ajoute un chemin de type « svgPath » à ce tracé, en utilisant éventuellement « transform » pour modifier les points du tracé. Si la taille estimée du tracé est connue, pensez à appeler « reserve() » au préalable.
![]() | |
Consultez la documentation W3C SVG Path Data pour plus de détails sur ce format.
Cette fonction a été introduite dans Qt 6.12.
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 de la matrice 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 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. Les plages start et count sont vérifiées, afin que les commandes ne soient pas accessibles au-delà de QCanvasPath::commandsSize(). Si le chemin ne doit pas se poursuivre à partir de la position actuelle, appelez d'abord moveTo() avec path.positionAt(start - 1).
void QCanvasPath::arc(qreal centerX, qreal centerY, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)
Crée un arc centré sur QPointF(centerX, centerY) avec l'radius donné, commençant à un angle de a0 radians et se terminant à a1 radians. L'arc s'étend sur la direction donnée. Lorsque connection vaut NotConnected, le chemin précédent est fermé et un nouveau sous-chemin est créé.
void QCanvasPath::arc(QPointF centerPoint, qreal radius, qreal a0, qreal a1, QCanvasPainter::PathWinding direction = QCanvasPainter::PathWinding::ClockWise, QCanvasPainter::PathConnection connection = QCanvasPainter::PathConnection::Connected)
Crée un arc centré sur centerPoint avec l'radius donné, commençant à un angle de a0 radians et se terminant à a1 radians. L'arc s'étend sur la direction donnée. Lorsque connection est égal à NotConnected, le chemin précédent est fermé et un nouveau sous-chemin est créé.
Il s'agit d'une fonction surchargée.
void QCanvasPath::arcTo(qreal x1, qreal y1, qreal x2, qreal y2, qreal radius)
Crée un arc à partir des points QPointF(x1, y1) et QPointF(x2, y2) avec l'radius.
void QCanvasPath::arcTo(QPointF point1, QPointF point2, qreal radius)
Crée un arc à partir des points point1 et point2, avec l'radius donnée.
Il s'agit d'une fonction surchargée.
void QCanvasPath::beginHoleSubPath()
Créer un sous-chemin de trou. Cela revient à utiliser la commande « setPathWinding(QCanvasPainter::PathWinding::ClockWise) »)
Voir également beginSolidSubPath().
void QCanvasPath::beginSolidSubPath()
Lancer un sous-parcours solide. Cela revient à setPathWinding(QCanvasPainter::PathWinding::CounterClockWise))
Voir également beginHoleSubPath().
void QCanvasPath::bezierCurveTo(qreal cp1X, qreal cp1Y, qreal cp2X, qreal cp2Y, qreal x, qreal 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.
Une fois la courbe ajoutée, la position actuelle est mise à jour pour se situer au point d'extrémité 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'endPoint e indiquée, en utilisant les points de contrôle spécifiés par controlPoint1 et controlPoint2.
Une fois la courbe ajoutée, la position actuelle est mise à jour pour se situer au point d'extrémité de la courbe.
Il s'agit d'une fonction surchargée.
void QCanvasPath::circle(qreal x, qreal y, qreal radius)
Ajoute au tracé un cercle dont le centre est situé à l'adresse QPointF(x, y) et dont le diamètre est spécifié par radius.
void QCanvasPath::circle(QPointF centerPoint, qreal radius)
Ajoute au tracé un cercle dont le centre est situé à l'adresse centerPoint et dont le rayon est celui indiqué par ` radius `.
Il s'agit d'une fonction surchargée.
void QCanvasPath::clear()
Efface les commandes et les données du chemin.
Appelez cette fonction lorsque les commandes du chemin changent afin de recréer le chemin. Cela n'affecte pas l'utilisation de la mémoire ; utilisez plutôt reserve() et squeeze() à cette fin.
Voir également reserve() et squeeze().
void QCanvasPath::closePath()
Ferme le sous-trajet actuel en traçant une ligne jusqu'au début de celui-ci, ce qui lance automatiquement un nouveau trajet.
qsizetype QCanvasPath::commandsCapacity() const
Renvoie la capacité des commandes situées dans le chemin d'accès.
Voir également commandsDataCapacity() et reserve().
qsizetype QCanvasPath::commandsDataCapacity() const
Renvoie la taille des données de commandes présentes dans le chemin.
Voir également commandsCapacity() et reserve().
qsizetype QCanvasPath::commandsDataSize() const
Renvoie la quantité de données de commandes présentes dans le chemin.
Les données de commande correspondent essentiellement aux points requis par les commandes.
Remarque : certains éléments de chemin nécessitent plusieurs points de données. Par exemple, « closePath » nécessite les points de données « 0 », « moveTo » et « lineTo » ; « 2 » nécessite les points de données « » ; « bezierCurveTo » nécessite 6 points de données ; et « roundRect » nécessite les points de données « 34 ».
qsizetype QCanvasPath::commandsSize() const
Renvoie le nombre de commandes présentes dans le chemin.
Remarque : certains éléments du chemin d'accès nécessitent plusieurs commandes. Par exemple, moveTo et lineTo nécessitent la commande 1, bezierCurveTo nécessite la commande 6 et roundRect nécessite la commande 10.
QPointF QCanvasPath::currentPosition() const
Renvoie la position actuelle du chemin. Il s'agit de la position à laquelle la commande de chemin précédente (moveTo, lineTo, bezierCurveTo, etc.) s'est terminée. Lorsque le chemin est vide, renvoie (0,0, 0,0).
void QCanvasPath::ellipse(qreal x, qreal y, qreal radiusX, qreal radiusY)
Crée une ellipse centrée sur (x, y), dont les rayons sont définis par radiusX et radiusY, et l'ajoute au tracé en tant que sous-tracé fermé.
void QCanvasPath::ellipse(const QRectF &rect)
Crée une ellipse à l'intérieur du rectangle rect et l'ajoute au tracé en tant que sous-tracé fermé.
Il s'agit d'une fonction surchargée.
bool QCanvasPath::isEmpty() const
Renvoie « true » lorsque le chemin est vide.
Voir aussi clear.
void QCanvasPath::lineTo(QPointF point)
Ajoute une ligne droite reliant la position actuelle à l'point e indiquée. Une fois la ligne tracée, la position actuelle est mise à jour pour correspondre au point d'arrivée de la ligne.
Il s'agit d'une fonction surchargée.
void QCanvasPath::lineTo(qreal x, qreal y)
Trace une ligne entre la position actuelle et le point (x, y).
Il s'agit d'une fonction surchargée.
void QCanvasPath::moveTo(QPointF point)
Déplace le point courant vers l'point indiquée, en créant implicitement un nouveau sous-trajet et en fermant le précédent.
Il s'agit d'une fonction surchargée.
void QCanvasPath::moveTo(qreal x, qreal y)
Déplace la position courante vers (x, y) et lance un nouveau sous-trajet, en fermant implicitement le trajet précédent.
Il s'agit d'une fonction surchargée.
QPointF QCanvasPath::positionAt(qsizetype index) const
Renvoie la position du chemin dans index. Il s'agit de la position à laquelle se trouve la commande « path » (moveTo, lineTo, bezierCurveTo, etc.) dans index. L'indice doit être compris entre 0 et commandsSize() - 1. Si le chemin est vide, la fonction renvoie (0,0, 0,0).
void QCanvasPath::quadraticCurveTo(qreal cpX, qreal cpY, qreal x, qreal y)
Ajoute une courbe de Bézier quadratique entre le point actuel et le point d'arrivée (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'endPoint e indiquée, avec le point de contrôle spécifié par controlPoint.
Il s'agit d'une fonction surchargée.
void QCanvasPath::rect(qreal x, qreal y, qreal width, qreal height)
Crée un rectangle positionné aux coordonnées QPointF(x, y) avec les paramètres width et height.
void QCanvasPath::rect(const QRectF &rect)
Crée un rectangle défini par rect
Il s'agit d'une fonction surchargée.
void QCanvasPath::reserve(qsizetype commandsSize, qsizetype commandsDataSize = -1)
Réserve un certain espace dans la mémoire interne d'QCanvasPath.
Tente d'allouer de la mémoire pour au moins commandsSize commandes et commandsDataSize points de données. Certains éléments de chemin nécessitent plusieurs commandes, voir commandsSize() et commandsDataSize().
Si commandsDataSize n’est pas spécifié, de l’espace est alors automatiquement réservé pour 2 * commandsSize quantité de données, ce qui correspond à la quantité optimale lorsque les commandes du tracé sont des lignes droites (moveTo(), lineTo(), rect()).
La réservation d'un espace adéquat constitue une optimisation pour la création du chemin et l'utilisation de la mémoire. Elle n'est pas obligatoire, car un espace suffisant sera automatiquement garanti lors de l'ajout de commandes dans le chemin.
Voir également squeeze(), commandsCapacity() et commandsDataCapacity().
void QCanvasPath::roundRect(qreal x, qreal y, qreal width, qreal height, qreal radius)
Ajoute au tracé le rectangle spécifié x, y, width, height avec des coins arrondis. Les coins sont des quarts de cercle définis par radius.
void QCanvasPath::roundRect(qreal x, qreal y, qreal width, qreal height, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
Ajoute au tracé les rectangles x, y, width et height, dont les coins sont arrondis. Les coins sont des quarts de cercle dont les rayons sont respectivement radiusTopLeft, radiusTopRight, radiusBottomRight et radiusBottomLeft.
void QCanvasPath::roundRect(const QRectF &rect, qreal radius)
Ajoute au tracé le rectangle spécifié rect avec des coins arrondis. Les coins sont des quarts de cercle dont les coordonnées sont spécifiées radius.
Il s'agit d'une fonction surchargée.
void QCanvasPath::roundRect(const QRectF &rect, qreal radiusTopLeft, qreal radiusTopRight, qreal radiusBottomRight, qreal radiusBottomLeft)
Ajoute au tracé le rectangle rect avec des coins arrondis. Les coins sont des quarts de cercle dont les rayons sont respectivement radiusTopLeft, radiusTopRight radiusBottomRight et radiusBottomLeft.
Il s’agit d’une fonction surchargée.
void QCanvasPath::setPathWinding(QCanvasPainter::PathWinding winding)
Définit le sous-trajet actuel winding sur QCanvasPainter::CounterClockWise (par défaut) ou QCanvasPainter::ClockWise. L'option « CounterClockWise » dessine des sous-trajets pleins, tandis que l'option « ClockWise » dessine des trous.
Remarque : il s'agit d'une commande similaire à lineTo, moveTo, etc. ; par conséquent, la définition du sens d'enroulement doit être effectuée avant l'exécution des autres commandes auxquelles ce changement de sens doit s'appliquer.
QCanvasPath QCanvasPath::sliced(qsizetype start, qsizetype count, const QTransform &transform = QTransform()) const
Renvoie un nouveau chemin contenant les commandes de ce chemin, à partir de la commande située à l'adresse start et comprenant count nombre de commandes, en utilisant éventuellement transform pour modifier les points du chemin.
La plage comprise entre start et count est vérifiée, afin que l'on n'accède pas à plus de commandsSize(). Si la commande située à l'adresse start n'est pas MoveTo, la première commande sera remplacée par MoveTo afin que cette tranche constitue un chemin distinct.
void QCanvasPath::squeeze()
Libère toute la mémoire qui n'est pas nécessaire au stockage des commandes et des données du chemin d'accès. Cette fonction peut être utilisée pour réduire l'utilisation de la mémoire après l'appel de la fonction ` reserve()`.
Normalement, cette fonction n’est pas nécessaire, mais elle peut s’avérer utile lorsque la taille du chemin est 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 qu’elle soit nettement réduite par la suite. Dans ce cas, appeler d’abord reserve() puis squeeze() permettra de libérer de la mémoire.
Voir également reserve().
[noexcept] void QCanvasPath::swap(QCanvasPath &other)
Permute ce chemin avec other. Cette opération est très rapide et ne rencontre jamais d'échec.
QCanvasPath::operator QVariant() const
Renvoie le chemin sous la forme « QVariant ».
[noexcept] QCanvasPath &QCanvasPath::operator=(QCanvasPath &&other)
Cette opération attribue l'other à cette instance QCanvasPath.
QCanvasPath &QCanvasPath::operator=(const QCanvasPath &path)
Attribue l'path on spécifiée à ce chemin et renvoie une référence à ce chemin.
Éléments non membres associés
[noexcept] bool operator!=(const QCanvasPath &lhs, const QCanvasPath &rhs)
Renvoie « true » si le chemin « lhs » est différent de « rhs » ; « false » dans le cas contraire.
Voir aussi operator==().
[noexcept] bool operator==(const QCanvasPath &lhs, const QCanvasPath &rhs)
Renvoie « true » si le chemin « lhs » est égal à « rhs » ; « false » dans le cas contraire.
Voir également 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.
