QQmlPropertyMap Class
La classe QQmlPropertyMap vous permet de définir des paires clé-valeur pouvant être utilisées dans les liaisons QML. En savoir plus...
| En-tête : | #include <QQmlPropertyMap> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake : | QT += qml |
| Hérite de : | 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 offre un moyen pratique d'exposer les données de domaine à la couche d'interface utilisateur. L'exemple suivant montre comment déclarer des données en C++ puis 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 l'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é est également mis à jour.
Pour détecter les modifications de valeur effectuées au niveau de la couche UI, vous pouvez vous connecter au signal ` valueChanged()`. Notez toutefois que le signal ` valueChanged()` n’ est PAS émis lorsque des modifications sont effectuées en appelant ` insert()` ou ` clear()` : il n’est émis que lorsqu’une valeur est mise à jour depuis 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 l’ protected two-argument constructor, qui garantit que la classe est correctement enregistrée auprès du système de méta-objets Qt.
Remarque : l' QMetaObject d'un QQmlPropertyMap est généré et modifié de manière dynamique. Les opérations sur ce méta-objet ne sont pas sûres inter-threads ; les applications doivent donc veiller à synchroniser explicitement l'accès à ce méta-objet.
Documentation des fonctions membres
[protected] template <typename DerivedType> QQmlPropertyMap::QQmlPropertyMap(DerivedType *derived, QObject *parent)
Construit une carte liable avec l'objet parent de type parent. Utilisez ce constructeur dans les classes dérivées de QQmlPropertyMap.
Le type de ` derived ` est utilisé pour enregistrer la carte de propriétés auprès du système de méta-objets, 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();Puis, 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()
Supprime la carte associable.
void QQmlPropertyMap::clear(const QString &key)
Efface la valeur (le cas échéant) associée à « key ».
bool QQmlPropertyMap::contains(const QString &key) const
Renvoie « true » 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 pouvant être liée à un objet parent parent.
[since 6.1] void QQmlPropertyMap::freeze()
Empêche l'ajout de nouvelles propriétés à cette carte de propriétés. Les propriétés existantes peuvent être modifiées ou supprimées.
Par ailleurs, un cache interne est activé pour les propriétés existantes, ce qui peut se traduire par un accès plus rapide depuis QML.
Cette fonctionnalité a été introduite dans Qt 6.1.
[since 6.1] void QQmlPropertyMap::insert(const QVariantHash &values)
Insère l'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 » sur « value ».
Si la clé n'existe pas, elle est automatiquement créée.
bool QQmlPropertyMap::isEmpty() const
Renvoie « true » si la carte ne contient aucune clé ; sinon, renvoie « 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 les valeurs qui leur sont associées sont des QVariants non valides.
Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.
int QQmlPropertyMap::size() const
Renvoie le nombre de clés contenues dans la carte.
Voir également isEmpty() et count().
[virtual protected] QVariant QQmlPropertyMap::updateValue(const QString &key, const QVariant &input)
Renvoie la nouvelle valeur à enregistrer pour la clé key. Cette fonction permet d’intercepter les mises à jour d’une propriété provenant de QML, lorsque la valeur fournie par QML est input.
Redéfinissez cette fonction pour modifier la valeur de la propriété au moment de sa mise à jour. Notez que cette fonction n'est appelé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 valeur « QVariant » non valide 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 à l'value e qui a été modifiée.
Remarque : valueChanged () n' est PAS émis lorsque les modifications sont effectué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 table ne contient aucun élément avec la clé key, la fonction insère une valeur non valide QVariant dans la table avec la clé key, puis renvoie une référence à celle-ci.
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.