Types de séquence QML
Pour chaque type d'objet et de valeur, un type de séquence permettant de stocker plusieurs instances du type est automatiquement mis à disposition. Vous pouvez utiliser le mot-clé list pour créer des propriétés de types de séquence :
import QtQml QtObject { property list<int> ints: [1, 2, 3, 4] property list<Connection> connections: [ Connection { // ... }, Connection { // ... } ] }
Les séquences de types de valeurs sont implémentées comme QList et les séquences de types d'objets sont implémentées comme QQmlListProperty.
Les séquences en QML se comportent généralement comme le type JavaScript Array, avec quelques différences importantes qui résultent de l'utilisation d'un type de stockage C++ dans la mise en œuvre :
- La suppression d'un élément d'une séquence entraîne le remplacement de cet élément par une valeur construite par défaut, plutôt que par une valeur
undefined. - La définition de la propriété
lengthd'une séquence à une valeur supérieure à sa valeur actuelle aura pour effet de remplir la séquence à la longueur spécifiée avec des éléments construits par défaut plutôt qu'avec des élémentsundefined. - Les classes de conteneurs Qt prennent en charge les index d'entiers signés (plutôt que non signés) ; par conséquent, toute tentative d'accès à un index supérieur au nombre maximal que qsizetype peut contenir échouera.
Si vous souhaitez supprimer des éléments d'une séquence plutôt que de les remplacer par des valeurs construites par défaut, n'utilisez pas l'opérateur de suppression indexé (delete sequence[i]), mais plutôt la fonction splice (sequence.splice(startIndex, deleteCount)).
En général, tout conteneur reconnu par QMetaSequence peut être transmis de C++ à QML via les méthodes Q_PROPERTY ou Q_INVOKABLE. Cela inclut, sans s'y limiter, tous les conteneurs enregistrés QList, QQueue, QStack, QSet, std::list, std::vector qui contiennent un type marqué par Q_DECLARE_METATYPE.
L'utilisation d'une séquence via QMetaSequence entraîne des conversions de données coûteuses. Pour éviter ces conversions, vous pouvez enregistrer vos propres types de séquences anonymes en utilisant QML_SEQUENTIAL_CONTAINER à partir de C++. Les types enregistrés de cette manière se comportent comme les types de séquence prédéfinis et sont stockés tels quels. Cependant, ils n'ont pas de nom QML.
Attention : Les séquences stockées dans un conteneur C++ comme QList ou std::vector sont soumises aux effets causés par les références de type de valeur et de séquence QML et doivent donc être manipulées avec précaution. QQmlListProperty n'est pas concerné puisqu'il s'agit uniquement d'une vue pour un conteneur sous-jacent. Les conteneurs standard C++ tels que std::vector ne sont pas implicitement partagés. Par conséquent, leur copie produit toujours une copie profonde. Comme une séquence lue à partir d'une propriété doit toujours être copiée au moins une fois, l'utilisation de tels conteneurs en tant que séquences QML est plutôt coûteuse, même si vous ne les modifiez pas à partir de QML.
Le module QtQml contient quelques sequence types que vous pouvez utiliser.
© 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.