QQmlPropertyMap Class
La classe QQmlPropertyMap vous permet de définir des paires clé-valeur qui peuvent être utilisées dans les liaisons QML. Plus d'informations...
| En-tête : | #include <QQmlPropertyMap> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Qml)target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake : | QT += qml |
| Héritages : | QObject |
Fonctions publiques
| virtual | ~QQmlPropertyMap() override |
| void | clear(const QString &key) |
| bool | contains(const QString &key) const |
| int | count() const |
(since 6.1) void | freeze() |
(since 6.1) void | insert(const QVariantHash &values) |
| void | insert(const QString &key, const QVariant &value) |
| bool | isEmpty() const |
| QStringList | keys() const |
| int | size() const |
| QVariant | value(const QString &key) const |
| QVariant & | operator[](const QString &key) |
| QVariant | operator[](const QString &key) const |
Signaux
| void | valueChanged(const QString &key, const QVariant &value) |
Membres publics statiques
| QQmlPropertyMap * | create(QObject *parent = nullptr) |
Fonctions protégées
| QQmlPropertyMap(DerivedType *derived, QObject *parent) | |
| virtual QVariant | updateValue(const QString &key, const QVariant &input) |
Description détaillée
QQmlPropertyMap est un moyen pratique d'exposer les données d'un domaine à la couche d'interface utilisateur. L'exemple suivant montre comment vous pouvez déclarer des données en C++ et y accéder en QML.
Dans le fichier C++ :
// create our data QQmlPropertyMap ownerData; ownerData.insert("name", QVariant(QString("John Smith"))); ownerData.insert("phone", QVariant(QString("555-5555"))); // expose it to the UI layer QQuickView view; QQmlContext *ctxt = view.rootContext(); ctxt->setContextProperty("owner", &ownerData); view.setSource(QUrl::fromLocalFile("main.qml")); view.show();
Puis, dans main.qml:
Text { text: owner.name + " " + owner.phone }La liaison est dynamique - chaque fois que la valeur d'une clé est mise à jour, tout ce qui est lié à cette clé sera également mis à jour.
Pour détecter les changements de valeur effectués dans la couche d'interface utilisateur, vous pouvez vous connecter au signal valueChanged(). Cependant, notez que valueChanged() n'est PAS émis lorsque des changements sont effectués en appelant insert() ou clear() - il n'est émis que lorsqu'une valeur est mise à jour à partir de QML.
Remarque : il n'est pas possible de supprimer des clés de la carte ; une fois qu'une clé a été ajoutée, vous ne pouvez que modifier ou effacer la valeur qui lui est associée.
Remarque : lorsque vous dérivez une classe de QQmlPropertyMap, utilisez le site protected two-argument constructor qui garantit que la classe est correctement enregistrée dans le système de méta-objets de Qt.
Note : Le site QMetaObject d'une QQmlPropertyMap est généré et modifié dynamiquement. Les opérations sur cet objet méta ne sont pas sûres pour les threads, et les applications doivent donc veiller à synchroniser explicitement l'accès à l'objet méta.
Documentation des fonctions membres
[protected] template <typename DerivedType> QQmlPropertyMap::QQmlPropertyMap(DerivedType *derived, QObject *parent)
Construit une carte liante avec l'objet parent parent. Utilisez ce constructeur dans les classes dérivées de QQmlPropertyMap.
Le type de derived est utilisé pour enregistrer la table des propriétés auprès du Meta-Object System, ce qui est nécessaire pour garantir l'accessibilité des propriétés de la classe dérivée. Ce type doit être dérivé de QQmlPropertyMap.
Dans le fichier C++ :
class MyQmlPropertyMap : public QQmlPropertyMap { Q_OBJECT QML_NAMED_ELEMENT(MyQmlPropertyMap) public: explicit MyQmlPropertyMap(QObject *parent = nullptr) : QQmlPropertyMap(this, parent) { insert("name", "John Smith"); insert("phone", "555-5555"); insert("email", "john.smith@example.com"); } public slots: void updateEmail(const QString &newEmail) { insert("email", newEmail); } }; QQuickView view; view.setSource(QUrl("qrc:/main.qml")); view.show();
Ensuite, dans main.qml:
MyQmlPropertyMap
{
id : owner
Component.onCompleted: { owner.updateEmail("new.email@example.com") }
}
Text { text : owner.name + " " + owner.phone + " " + owner.email }[override virtual noexcept] QQmlPropertyMap::~QQmlPropertyMap()
Détruit la carte liante.
void QQmlPropertyMap::clear(const QString &key)
Efface la valeur (le cas échéant) associée à key.
bool QQmlPropertyMap::contains(const QString &key) const
Retourne vrai si la carte contient key.
Voir aussi size().
int QQmlPropertyMap::count() const
Identique à size().
[static] QQmlPropertyMap *QQmlPropertyMap::create(QObject *parent = nullptr)
Crée une carte liante avec l'objet parent parent.
[since 6.1] void QQmlPropertyMap::freeze()
Interdit l'ajout de nouvelles propriétés à cette carte des propriétés. Les propriétés existantes peuvent être modifiées ou effacées.
Par ailleurs, un cache interne est activé pour les propriétés existantes, ce qui peut permettre un accès plus rapide à partir de QML.
Cette fonction a été introduite dans Qt 6.1.
[since 6.1] void QQmlPropertyMap::insert(const QVariantHash &values)
Insère le values dans le QQmlPropertyMap.
Les clés qui n'existent pas sont automatiquement créées.
Cette méthode est nettement plus rapide que d'appeler insert(key, value) plusieurs fois de suite.
Cette fonction a été introduite dans Qt 6.1.
void QQmlPropertyMap::insert(const QString &key, const QVariant &value)
Définit la valeur associée à key en value.
Si la clé n'existe pas, elle est automatiquement créée.
bool QQmlPropertyMap::isEmpty() const
Retourne true si la carte ne contient pas de clés, sinon retourne false.
Voir aussi size().
[invokable] QStringList QQmlPropertyMap::keys() const
Renvoie la liste des clés.
Les clés qui ont été effacées apparaîtront toujours dans cette liste, même si leurs valeurs associées sont des QVariants invalides.
Remarque : cette fonction peut être invoquée via le système de méta-objets et à partir de QML. Voir Q_INVOKABLE.
int QQmlPropertyMap::size() const
Renvoie le nombre de clés dans la carte.
Voir aussi isEmpty() et count().
[virtual protected] QVariant QQmlPropertyMap::updateValue(const QString &key, const QVariant &input)
Renvoie la nouvelle valeur à stocker pour la clé key. Cette fonction est fournie pour intercepter les mises à jour d'une propriété à partir de QML, lorsque la valeur fournie par QML est input.
Surchargez cette fonction pour manipuler la valeur de la propriété au fur et à mesure qu'elle est mise à jour. Notez que cette fonction n'est invoquée que lorsque la valeur est mise à jour à partir de QML.
QVariant QQmlPropertyMap::value(const QString &key) const
Renvoie la valeur associée à key.
Si aucune valeur n'a été définie pour cette clé (ou si la valeur a été effacée), une adresse QVariant invalide est renvoyée.
[signal] void QQmlPropertyMap::valueChanged(const QString &key, const QVariant &value)
Ce signal est émis chaque fois qu'une des valeurs de la carte est modifiée. key est la clé correspondant à la valeur value qui a été modifiée.
Remarque : valueChanged() n' est PAS émis lorsque des modifications sont apportées en appelant insert() ou clear() - il n'est émis que lorsqu'une valeur est mise à jour à partir de QML.
QVariant &QQmlPropertyMap::operator[](const QString &key)
Renvoie la valeur associée à la clé key sous la forme d'une référence modifiable.
Si la carte ne contient aucun élément avec la clé key, la fonction insère un QVariant invalide dans la carte avec la clé key, et renvoie une référence à cet élément.
Voir aussi insert() et value().
QVariant QQmlPropertyMap::operator[](const QString &key) const
Identique à value().
Il s'agit d'une fonction surchargée.
© 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.