Shape QML Type
Rend un chemin. Plus d'informations...
| Import Statement: | import QtQuick.Shapes 1.11 |
| 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
Rend un chemin en triangulant la géométrie à partir d'un QPainterPath.
Cette approche est différente du rendu de formes via QQuickPaintedItem ou le 2D Canvas car le chemin n'est jamais tramé dans le logiciel. Shape est donc adapté à la création de formes s'étendant sur de grandes zones de l'écran, évitant ainsi la pénalité de performance pour les téléchargements de textures ou les vidages du framebuffer. En outre, l'API déclarative permet de manipuler, de lier et même d'animer les propriétés des éléments du chemin, comme la position de départ et d'arrivée, les points de contrôle, etc.
Les types permettant de spécifier les éléments de chemin sont partagés entre PathView et Shape. Cependant, toutes les implémentations de Shape ne prennent pas en charge tous les types d'éléments de chemin, 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.
Voir 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 } } }

Comme Item, Shape permet également à tout objet visuel ou non visuel d'être déclaré comme enfant. Les objets ShapePath sont traités de manière particulière. Ceci est utile car cela permet d'ajouter des éléments visuels, comme Rectangle ou Image, et des objets non visuels, comme Timer, directement en tant qu'enfants de Shape.
La liste suivante résume les approches de rendu disponibles pour Shape :
- Lorsque Qt Quick fonctionne avec le backend par défaut accéléré par le matériel (RHI), le moteur de rendu de formes générique est utilisé. Il convertit les formes en triangles qui sont transmis au moteur de rendu.
- Le backend
softwareest entièrement pris en charge. Dans ce cas, le chemin est rendu via QPainter::strokePath() et QPainter::fillPath(). - Le backend OpenVG n'est pas pris en charge actuellement.
Lors de l'utilisation de Shape, il est important d'être conscient des 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 se fait entièrement sur le processeur. Cela peut s'avérer coûteux. 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 la forme elle-même entraînent toutes une nouvelle triangulation des chemins concernés à chaque modification. Par conséquent, l'application de l'animation à ces propriétés peut affecter les performances des systèmes les moins puissants.
- Toutefois, la nature déclarative et axée sur les données de l'API Shape se traduit souvent par une meilleure mise en cache des ressources CPU et GPU sous-jacentes. Un changement de propriété sur un site ShapePath n'entraînera qu'un retraitement du site ShapePath concerné, laissant les autres parties de la forme inchangées. Par conséquent, une propriété qui change fréquemment peut toujours entraîner une charge globale du système inférieure à celle des approches de peinture impérative (par exemple, QPainter).
- Dans le même temps, il convient de prêter attention au nombre d'éléments de forme dans la scène. La façon dont un tel élément Shape est représenté dans le graphe de la scène est différente d'un élément géométrique ordinaire, et entraîne un certain coût en ce qui concerne les changements d'état OpenGL.
- En règle générale, les scènes doivent éviter d'utiliser des éléments Shape séparés lorsque cela n'est pas absolument nécessaire. Il est préférable d'utiliser un élément Shape avec plusieurs éléments ShapePath plutôt que plusieurs éléments Shape.
Voir aussi Qt Quick Exemples - Formes, Exemple de prévisions météorologiques, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc, et PathSvg.
Documentation sur les propriétés
asynchronous : bool
Lorsque rendererType est Shape.GeometryRenderer ou Shape.CurveRenderer, un certain nombre de prétraitements du chemin d'entrée sont effectués sur l'unité centrale pendant la phase de polissage de la forme. Cette opération peut s'avérer coûteuse. Pour décharger ce travail sur des threads de travail séparés, définissez cette propriété sur true.
Lorsque cette propriété est activée, le fait de rendre une forme visible n'attend pas que le contenu soit disponible. Au lieu de cela, le fil d'exécution principal de l'interface graphique n'est pas bloqué et les résultats du rendu de la trajectoire ne sont affichés que lorsque tout le travail asynchrone est terminé.
La valeur par défaut est false.
boundingRect : rect [read-only, since 6.6]
Contient le rectangle de délimitation uni de tous les chemins secondaires 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 contains() pour la forme. Elle est utile si vous ajoutez des gestionnaires d'entréeQt Quick et que vous souhaitez réagir uniquement lorsque 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 QQuickItem::contains() vérifie uniquement si le point donné se trouve à l'intérieur de la boîte de délimitation rectangulaire. Il s'agit de l'implémentation la plus efficace, c'est pourquoi elle est utilisée par défaut. |
Shape.FillContains | Vérifier si l'intérieur (la partie qui serait remplie en cas de rendu avec remplissage) de tout ShapePath composant cette forme contient le point donné. Plus vous ajoutez de ShapePaths complexes et nombreux, moins cette vérification est efficace, ce qui peut potentiellement ralentir la diffusion des événements dans votre application. Il convient donc de l'utiliser avec précaution. |
Une façon d'accélérer la vérification de FillContains est de générer un contour approximatif avec le moins de points possible, de le placer dans une Shape transparente et d'y ajouter vos Pointer Handlers, de façon à ce que la vérification du confinement soit moins coûteuse lors de l'envoi de l'événement.
Cette propriété a été introduite dans QtQuick.Shapes 1.11.
data : list<Object> [default]
Cette propriété contient les objets ShapePath qui définissent le contenu de la forme. Elle peut également contenir tout autre type d'objets, puisque Shape, comme Item, permet d'ajouter n'importe quel objet visuel ou non visuel en tant qu'enfant.
fillMode : enumeration [since QtQuick.Shapes 6.7]
Cette propriété permet de définir 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 rendue à sa taille native, indépendamment de la taille de l'élément. Il s'agit de la valeur 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 réduction 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 uniformément pour s'adapter à l'intérieur de l'élément |
Shape.PreserveAspectCrop | la forme est mise à l'échelle uniformément pour remplir entièrement l'élément, en s'étendant à l'extérieur de l'élément si nécessaire. Notez que cela ne recadre réellement le contenu que si clip est vrai |
Cette propriété a été introduite dans QtQuick.Shapes 6.7.
Définit l'alignement horizontal et vertical de la forme dans l'élément. Par défaut, la forme est alignée sur (0,0) dans le coin supérieur gauche.
Les valeurs valables 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]
Demande l'utilisation d'un backend spécifique 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'il n'y a pas de préférence particulière.
Si le type de rendu demandé n'est pas pris en charge par le backend Qt Quick actuel, le rendu par défaut de ce backend sera utilisé à la place. Ceci sera reflété dans le site rendererType lorsque le backend sera initialisé.
Shape.SoftwareRenderer ne peut actuellement pas être sélectionné sans que la scène soit exécutée avec le backend software, auquel cas il sera sélectionné indépendamment du backend 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 backend de rendu de chemin 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 de QPainter. Il s'agit de la valeur par défaut lorsque le backend Qt Quick scenegraph basé sur RHI est utilisé. |
Shape.SoftwareRenderer | Dessin pur QPainter utilisant le moteur de peinture matricielle. C'est l'option par défaut, et la seule, lorsque le scenegraph Qt Quick est exécuté avec le backend software. |
Shape.CurveRenderer | Rendu basé sur le GPU qui vise à préserver la courbure à n'importe quelle échelle. Contrairement à Shape.GeometryRenderer, les courbes ne sont pas approximées par de courtes lignes droites. Au lieu de cela, les courbes sont rendues à l'aide d'un nuanceur de fragment spécialisé. Cela permet d'améliorer la qualité visuelle et d'éviter l'impact de la re-tesselation sur les performances lors d'un zoom. En outre, Shape.CurveRenderer fournit un anticrénelage natif de haute qualité, sans le coût de performance du multi-échantillonnage ou du suréchantillonnage. |
Par défaut, Shape.GeometryRenderer sera sélectionné, sauf si la scène Qt Quick est exécutée avec le backend software. Dans ce cas, Shape.SoftwareRenderer sera utilisé. Shape.CurveRenderer peut être demandé à l'aide de la propriété preferredRendererType.
Remarque : Le site Shape.CurveRenderer approxime les courbes cubiques par des courbes quadratiques et peut donc s'écarter légèrement de la visualisation mathématiquement correcte de la forme. En outre, 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 à OpenGL est nécessaire (elle est disponible par défaut sur OpenGL ES 3 et plus, mais optionnelle sur OpenGL ES 2).
status : enumeration [read-only]
Cette propriété détermine l'état de la forme et est pertinente lorsque Shape.asynchronous est défini sur true.
| Constante | Description |
|---|---|
Shape.Null | Pas encore initialisé. |
Shape.Ready | Le traitement de la forme est terminé. |
Shape.Processing | La trajectoire 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.
Depuis Qt 6.0, aucun chemin de rendu spécifique au 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.