Types de séquences QML

Pour chaque type d'objet et chaque type de valeur, un type de séquence permettant de stocker plusieurs instances de ce type est automatiquement mis à disposition. Vous pouvez utiliser le mot-clé list pour créer des propriétés de type 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 sous la forme ` QList `, tandis que les séquences de types d’objets sont implémentées sous la forme ` QQmlListProperty`.

Dans QML, les séquences se comportent généralement comme le type JavaScript ` Array `, avec quelques différences importantes résultant de l’utilisation d’un type de stockage C++ dans l’implémentation :

  1. 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 de type ` undefined `.
  2. Si vous définissez la propriété ` length ` d’une séquence sur une valeur supérieure à sa valeur actuelle, la séquence sera complétée jusqu’à la longueur spécifiée avec des éléments construits par défaut plutôt qu’avec des éléments de type ` undefined `.
  3. Les classes de conteneurs Qt prennent en charge les index 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 simplement les remplacer par des valeurs construites par défaut, n’utilisez pas l’opérateur de suppression indexé (delete sequence[i]) mais utilisez plutôt la fonction splice (sequence.splice(startIndex, deleteCount)).

En général, tout conteneur reconnu par QMetaSequence peut être transmis du C++ vers QML via les méthodes Q_PROPERTY ou Q_INVOKABLE. Cela inclut, sans s’y limiter, tous les conteneurs enregistrés de type QList, QQueue, QStack, QSet, std::list et std::vector contenant un type marqué avec 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 à l'aide de QML_SEQUENTIAL_CONTAINER depuis C++. Les types enregistrés de cette manière se comportent comme les types de séquences prédéfinis et sont stockés tels quels. Cependant, ils ne disposent pas de noms QML.

Avertissement : les séquences stockées sous forme de conteneurs C++ tels que QList ou std::vector sont soumises aux effets induits par les références aux types de valeur et aux séquences QML et doivent donc être manipulées avec précaution. QQmlListProperty n’est pas concerné, car il s’agit uniquement d’une vue d’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. Étant donné qu’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 assez coûteuse, même si vous ne les modifiez pas depuis QML.

Le module « QtQml » contient quelques « sequence types » que vous pourriez souhaiter 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.