Shape QML Type
Affiche un tracé. En savoir plus…
| Import Statement: | import QtQuick.Shapes 1.12 |
| Inherits: | |
| Inherited By: |
Propriétés
- asynchronous : bool
- boundingRect : rect
(since 6.6) - containsMode : enumeration
(since QtQuick.Shapes 1.11) - data : list<Object>
- fillMode : enumeration
(since QtQuick.Shapes 6.7) - horizontalAlignment : enumeration
(since 6.7) - preferredRendererType : enumeration
(since 6.6) - rendererType : enumeration
- status : enumeration
- vendorExtensionsEnabled : bool
- verticalAlignment : enumeration
(since 6.7)
Description détaillée
Affiche un tracé en triangulant la géométrie à partir d'un fichier « QPainterPath ».
Cette approche diffère du rendu de formes via ` QQuickPaintedItem ` ou le `Canvas` 2D, car le tracé n’est jamais rastérisé en logiciel. Par conséquent, Shape est adapté à la création de formes s’étendant sur de grandes zones de l’écran, ce qui évite la perte de performances liée au chargement de textures ou aux blits du framebuffer. De plus, l’API déclarative permet de manipuler, de lier et même d’animer les propriétés des éléments du tracé, telles que les positions de départ et d’arrivée, les points de contrôle, etc.
Les types permettant de spécifier les éléments de tracé sont communs à « PathView » et à « Shape ». Cependant, toutes les implémentations de « Shape » ne prennent pas en charge tous les types d’éléments de tracé, tandis que certains peuvent ne pas avoir de sens pour « PathView ». Le sous-ensemble actuellement pris en charge par « Shape » est le suivant : PathMove, PathLine, PathQuad, PathCubic, PathArc, PathText et PathSvg.
Consultez Path pour un aperçu détaillé des éléments de chemin pris en charge.
Shape {
width: 200
height: 150
anchors.centerIn: parent
ShapePath {
strokeWidth: 4
strokeColor: "red"
fillGradient: LinearGradient {
x1: 20; y1: 20
x2: 180; y2: 130
GradientStop { position: 0; color: "blue" }
GradientStop { position: 0.2; color: "green" }
GradientStop { position: 0.4; color: "red" }
GradientStop { position: 0.6; color: "yellow" }
GradientStop { position: 1; color: "cyan" }
}
strokeStyle: ShapePath.DashLine
dashPattern: [ 1, 4 ]
startX: 20; startY: 20
PathLine { x: 180; y: 130 }
PathLine { x: 20; y: 130 }
PathLine { x: 20; y: 20 }
}
}
Tout comme Item, Shape permet également de déclarer n'importe quel objet visuel ou non visuel comme enfant. Les objets de type « ShapePath » font l'objet d'un traitement particulier. Cela s'avère utile car cela permet d'ajouter des éléments visuels, tels que Rectangle ou Image, ainsi que des objets non visuels, tels que Timer, directement en tant qu'enfants de Shape.
La liste suivante résume les approches de rendu de Shape disponibles :
- Lorsque Qt Quick fonctionne avec le backend par défaut à accélération matérielle (RHI), le moteur de rendu générique des formes est utilisé. Celui-ci convertit les formes en triangles qui sont transmis au moteur de rendu.
- Le backend «
software» est entièrement pris en charge. Dans ce cas, le tracé est rendu via ` QPainter::strokePath()` et ` QPainter::fillPath()`. - Le backend OpenVG n’est actuellement pas pris en charge.
Lors de l’utilisation de Shape, il est important de garder à l’esprit les implications potentielles en termes de performances :
- Lorsque l’application fonctionne avec l’implémentation générique de Shape basée sur la triangulation, la génération de la géométrie s’effectue entièrement sur le CPU. Cela peut s’avérer coûteux en ressources. La modification de l’ensemble des éléments du chemin, la modification des propriétés de ces éléments ou la modification de certaines propriétés de Shape lui-même entraînent une nouvelle triangulation des chemins concernés à chaque modification. Par conséquent, l’application d’une animation à ces propriétés peut affecter les performances sur les systèmes moins puissants.
- Cependant, la nature déclarative et pilotée par les données de l’API Shape se traduit souvent par une meilleure mise en cache pour les ressources CPU et GPU sous-jacentes. Une modification de propriété dans une « ShapePath » n’entraînera le retraitement que des « ShapePath » concernées, laissant les autres parties de la Shape inchangées. Par conséquent, une propriété changeant fréquemment peut tout de même entraîner une charge système globale inférieure à celle des approches de dessin impératives (par exemple, QPainter).
- Parallèlement, il convient de prêter attention au nombre d’éléments Shape présents dans la scène. La manière dont un tel élément Shape est représenté dans le graphe de scène diffère de celle d’un élément ordinaire basé sur la géométrie, et entraîne un certain coût en termes de changements d’état OpenGL.
- En règle générale, il convient d’éviter d’utiliser des éléments Shape distincts lorsque cela n’est pas absolument nécessaire. Privilégiez l’utilisation d’un seul élément Shape contenant plusieurs éléments ShapePath plutôt que de multiples éléments Shape.
Voir également les exemples d'Qt Quick s – Shapes, l'exemple de prévisions météorologiques, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc et PathSvg.
Documentation relative aux biens immobiliers
asynchronous : bool
Lorsque la propriété « rendererType » est définie sur « Shape.GeometryRenderer » ou « Shape.CurveRenderer », un certain traitement préalable du chemin d’entrée est effectué par le processeur (CPU) pendant la phase de polissage de la forme. Cette opération peut s’avérer coûteuse en ressources. Pour décharger cette tâche vers des threads de travail distincts, définissez cette propriété sur « true ».
Lorsque cette option est activée, la mise en évidence d’une forme n’attend pas que le contenu soit disponible. Ainsi, le fil d’exécution de l’interface graphique/fil principal n’est pas bloqué et les résultats du rendu du tracé ne s’affichent que lorsque toutes les tâches asynchrones sont terminées.
La valeur par défaut est « false ».
boundingRect : rect [read-only, since 6.6]
Contient le rectangle englobant de tous les sous-chemins de la forme.
Cette propriété a été introduite dans Qt 6.6.
containsMode : enumeration [since QtQuick.Shapes 1.11]
Cette propriété détermine la définition de la fonction ` contains()` pour la forme. Elle s'avère utile lorsque vous ajoutez des gestionnaires d'entrée de type «Qt Quick » et que vous souhaitez réagir uniquement lorsque le pointeur de la souris ou le point de contact se trouve entièrement à l'intérieur de la forme.
| Constante | Description |
|---|---|
Shape.BoundingRectContains | L'implémentation par défaut de la méthode ` QQuickItem::contains()` vérifie uniquement si le point donné se trouve à l'intérieur du rectangle de délimitation. Il s'agit de l'implémentation la plus efficace, c'est pourquoi elle est définie par défaut. |
Shape.FillContains | Vérifie si l’intérieur (la partie qui serait remplie si vous la rendiez avec fill) de n’importe quel ShapePath composant cette Shape contient le point donné. Plus les ShapePaths que vous ajoutez sont complexes et nombreux, moins cette vérification est efficace, ce qui peut potentiellement ralentir la diffusion des événements dans votre application. Elle doit donc être utilisée avec précaution. |
Une façon d’accélérer la vérification de l’ FillContains consiste à générer un contour approximatif avec le moins de points possible, à le placer dans une Shape transparente par-dessus, puis à y ajouter vos gestionnaires de pointeurs, afin que la vérification d’inclusion soit moins coûteuse lors de la diffusion des événements.
Cette propriété a été introduite dans QtQuick.Shapes 1.11.
data : list<Object> [default]
Cette propriété contient les objets de type « ShapePath » qui définissent le contenu de la forme. Elle peut également contenir tout autre type d'objets, car la forme, tout comme l'élément, permet d'ajouter n'importe quel objet visuel ou non visuel en tant qu'enfant.
fillMode : enumeration [since QtQuick.Shapes 6.7]
Définissez cette propriété pour déterminer ce qui se passe lorsque le chemin a une taille différente de celle de l'élément.
| Constante | Description |
|---|---|
Shape.NoResize | la forme est affichée à sa taille d'origine, indépendamment de la taille de l'élément. Il s'agit du comportement par défaut |
Shape.Stretch | la forme est mise à l'échelle pour s'adapter à l'élément, en modifiant le rapport hauteur/largeur si nécessaire. Notez qu'une mise à l'échelle non uniforme peut entraîner une baisse de la qualité de l'anticrénelage lors de l'utilisation du moteur de rendu de courbes |
Shape.PreserveAspectFit | la forme est mise à l'échelle de manière uniforme pour s'adapter à l'intérieur de l'élément |
Shape.PreserveAspectCrop | la forme est mise à l'échelle de manière uniforme pour remplir entièrement l'élément, en débordant de celui-ci si nécessaire. Notez que cela ne recadre réellement le contenu que si la propriété ` clip ` est définie sur `true` |
Cette propriété a été introduite dans QtQuick.Shapes 6.7.
Définit l'alignement horizontal et vertical de la forme au sein de l'élément. Par défaut, la forme est alignée selon le principe « (0,0) » (alignement par rapport au centre) sur le coin supérieur gauche.
Les valeurs valides pour « horizontalAlignment » sont « Shape.AlignLeft », « Shape.AlignRight » et « Shape.AlignHCenter ». Les valeurs valides pour « verticalAlignment » sont « Shape.AlignTop », « Shape.AlignBottom » et « Shape.AlignVCenter ».
Ces propriétés ont été introduites dans Qt 6.7.
preferredRendererType : enumeration [since 6.6]
Spécifie le backend à utiliser pour le rendu de la forme. Les valeurs possibles sont les mêmes que pour ` rendererType`. La valeur par défaut est ` Shape.UnknownRenderer`, ce qui indique qu’aucune préférence particulière n’est spécifiée.
Si le type de moteur de rendu demandé n’est pas pris en charge par le backend Qt Quick actuel, le moteur de rendu par défaut de ce backend sera utilisé à la place. Cela se reflétera dans la propriété rendererType lors de l’initialisation du backend.
Shape.SoftwareRenderer ne peut actuellement pas être sélectionné sans exécuter le graphisme de scène avec le backend software; dans ce cas, il sera sélectionné indépendamment de la valeur de preferredRendererType.
Voir rendererType pour plus d’informations sur les implications.
Cette propriété a été introduite dans Qt 6.6.
rendererType : enumeration [read-only]
Cette propriété détermine quel moteur de rendu des chemins est actif.
| Constante | Description |
|---|---|
Shape.UnknownRenderer | Le moteur de rendu est inconnu. |
Shape.GeometryRenderer | Solution générique et indépendante du pilote pour le rendu GPU. Utilise la même approche de triangulation basée sur le CPU que le moteur de peinture OpenGL 2 d’ QPainter. C’est l’option par défaut lorsque le backend de graphe de scène Qt Quick basé sur RHI est utilisé. |
Shape.SoftwareRenderer | Rendu « pur » d’ QPainter utilisant le moteur de peinture raster. Il s’agit de l’option par défaut, et de la seule option disponible, lorsque le graphe de scène Qt Quick fonctionne avec le moteur software. |
Shape.CurveRenderer | Rendu basé sur le GPU visant à préserver la courbure à n’importe quelle échelle. Contrairement à l’ Shape.GeometryRenderer, les courbes ne sont pas approximées par de courtes lignes droites. Elles sont au contraire rendues à l’aide d’un shader de fragment spécialisé. Cela améliore la qualité visuelle et évite la perte de performances liée à la retessellation lors du zoom. De plus, Shape.CurveRenderer offre un anti-aliasing natif de haute qualité, sans le coût en performances lié au multi-échantillonnage ou au super-échantillonnage. |
Par défaut, l’option « Shape.GeometryRenderer » est sélectionnée, sauf si le graphe de scène « Qt Quick » s’exécute avec le backend « software ». Dans ce cas, l’option « Shape.SoftwareRenderer » sera utilisée. L’option « Shape.CurveRenderer » peut être demandée à l’aide de la propriété « preferredRendererType ».
Remarque : le format « Shape.CurveRenderer » approximera les courbes cubiques par des courbes quadratiques et peut donc s’écarter légèrement de la visualisation mathématiquement correcte de la forme. De plus, si la forme est rendue dans une scène 3D « Qt Quick » et que le backend OpenGL pour RHI est actif, l’extension « GL_OES_standard_derivatives » d’OpenGL est requise (celle-ci est disponible par défaut sur OpenGL ES 3 et versions ultérieures, mais facultative sur OpenGL ES 2).
status : enumeration [read-only]
Cette propriété détermine l'état de la forme et s'applique lorsque la propriété Shape.asynchronous est définie sur « true ».
| Constante | Description |
|---|---|
Shape.Null | Pas encore initialisé. |
Shape.Ready | La forme a terminé son traitement. |
Shape.Processing | Le tracé est en cours de traitement. |
vendorExtensionsEnabled : bool
Cette propriété contrôle l'utilisation des extensions OpenGL non standard.
La valeur par défaut est « false ».
À partir de Qt 6.0, aucun chemin de rendu spécifique à un fournisseur n'est implémenté.
© 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.