QQmlPropertyMap Class
Mit der Klasse „QQmlPropertyMap“ können Sie Schlüssel-Wert-Paare festlegen, die in QML-Bindungen verwendet werden können. Mehr...
| Header: | #include <QQmlPropertyMap> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += qml |
| Erbt von: | QObject |
Öffentliche Funktionen
| 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 |
Signale
| void | valueChanged(const QString &key, const QVariant &value) |
Statische öffentliche Mitglieder
| QQmlPropertyMap * | create(QObject *parent = nullptr) |
Geschützte Funktionen
| QQmlPropertyMap(DerivedType *derived, QObject *parent) | |
| virtual QVariant | updateValue(const QString &key, const QVariant &input) |
Ausführliche Beschreibung
QQmlPropertyMap bietet eine bequeme Möglichkeit, Domänen-Daten für die UI-Ebene verfügbar zu machen. Das folgende Beispiel zeigt, wie Sie Daten in C++ deklarieren und anschließend in QML darauf zugreifen können.
In der C++-Datei:
// 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();Anschließend in „ main.qml “:
Text { text: owner.name + " " + owner.phone }Die Bindung erfolgt dynamisch – sobald der Wert eines Schlüssels aktualisiert wird, werden alle an diesen Schlüssel gebundenen Elemente ebenfalls aktualisiert.
Um Wertänderungen in der UI-Ebene zu erkennen, können Sie eine Verbindung zum Signal „ valueChanged()“ herstellen. Beachten Sie jedoch, dass „ valueChanged()“ NICHT ausgelöst wird, wenn Änderungen durch den Aufruf von „ insert()“ oder „ clear()“ vorgenommen werden – es wird nur ausgelöst, wenn ein Wert aus QML aktualisiert wird.
Hinweis: Es ist nicht möglich, Schlüssel aus der Map zu entfernen; sobald ein Schlüssel hinzugefügt wurde, können Sie nur noch den zugehörigen Wert ändern oder löschen.
Hinweis: Wenn Sie eine Klasse von `QQmlPropertyMap` ableiten, verwenden Sie das ` protected two-argument constructor `, das sicherstellt, dass die Klasse korrekt im Qt-Metaobjektsystem registriert wird.
Hinweis: Das QMetaObject einer `QQmlPropertyMap` wird dynamisch generiert und geändert. Operationen an diesem Metaobjekt sind nicht threadsicher, daher müssen Anwendungen darauf achten, den Zugriff auf das Metaobjekt explizit zu synchronisieren.
Dokumentation der Mitgliedsfunktionen
[protected] template <typename DerivedType> QQmlPropertyMap::QQmlPropertyMap(DerivedType *derived, QObject *parent)
Erstellt eine bindbare Zuordnung mit dem übergeordneten Objekt „ parent “. Verwenden Sie diesen Konstruktor in Klassen, die von „QQmlPropertyMap“ abgeleitet sind.
Der Typ von ` derived ` wird verwendet, um die Eigenschaftskarte beim Meta-Objekt-System zu registrieren, was erforderlich ist, um sicherzustellen, dass auf die Eigenschaften der abgeleiteten Klasse zugegriffen werden kann. Dieser Typ muss von `QQmlPropertyMap` abgeleitet sein.
In der C++-Datei:
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();Anschließend in ` 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()
Löscht die zuweisbare Zuordnung.
void QQmlPropertyMap::clear(const QString &key)
Löscht den Wert (falls vorhanden), der mit „ key “ verknüpft ist.
bool QQmlPropertyMap::contains(const QString &key) const
Gibt „true“ zurück, wenn die Map „ key “ enthält.
Siehe auch ` size()`.
int QQmlPropertyMap::count() const
Entspricht „ size()“.
[static] QQmlPropertyMap *QQmlPropertyMap::create(QObject *parent = nullptr)
Erstellt eine bindbare Map mit dem übergeordneten Objekt „ parent “.
[since 6.1] void QQmlPropertyMap::freeze()
Verhindert, dass dieser Eigenschaftskarte weitere Eigenschaften hinzugefügt werden. Vorhandene Eigenschaften können geändert oder gelöscht werden.
Im Gegenzug wird für die vorhandenen Eigenschaften ein interner Cache aktiviert, was zu einem schnelleren Zugriff aus QML führen kann.
Diese Funktion wurde in Qt 6.1 eingeführt.
[since 6.1] void QQmlPropertyMap::insert(const QVariantHash &values)
Fügt die „ values “ in die „ QQmlPropertyMap “ ein.
Nicht vorhandene Schlüssel werden automatisch angelegt.
Diese Methode ist wesentlich schneller als der wiederholte Aufruf von ` insert(key, value) `.
Diese Funktion wurde in Qt 6.1 eingeführt.
void QQmlPropertyMap::insert(const QString &key, const QVariant &value)
Setzt den Wert, der mit „ key “ verknüpft ist, auf „ value “.
Falls der Schlüssel nicht existiert, wird er automatisch angelegt.
bool QQmlPropertyMap::isEmpty() const
Gibt „true“ zurück, wenn die Map keine Schlüssel enthält; andernfalls gibt sie „false“ zurück.
Siehe auch ` size()`.
[invokable] QStringList QQmlPropertyMap::keys() const
Gibt die Liste der Schlüssel zurück.
Auch gelöschte Schlüssel erscheinen weiterhin in dieser Liste, obwohl die ihnen zugeordneten Werte ungültige QVariants sind.
Hinweis: Diese Funktion kann über das Metaobjektsystem und aus QML aufgerufen werden. Siehe Q_INVOKABLE.
int QQmlPropertyMap::size() const
Gibt die Anzahl der Schlüssel in der Map zurück.
Siehe auch „ isEmpty()“ und „ count()“.
[virtual protected] QVariant QQmlPropertyMap::updateValue(const QString &key, const QVariant &input)
Gibt den neuen Wert zurück, der für den Schlüssel „ key “ gespeichert werden soll. Diese Funktion dient dazu, Aktualisierungen einer Eigenschaft aus QML abzufangen, wobei der von QML bereitgestellte Wert „ input “ lautet.
Überschreiben Sie diese Funktion, um den Wert der Eigenschaft bei der Aktualisierung zu bearbeiten. Beachten Sie, dass diese Funktion nur aufgerufen wird, wenn der Wert aus QML aktualisiert wird.
QVariant QQmlPropertyMap::value(const QString &key) const
Gibt den Wert zurück, der mit „ key “ verknüpft ist.
Wenn für diesen Schlüssel kein Wert festgelegt wurde (oder wenn der Wert gelöscht wurde), wird ein ungültiger „ QVariant “ zurückgegeben.
[signal] void QQmlPropertyMap::valueChanged(const QString &key, const QVariant &value)
Dieses Signal wird immer dann ausgelöst, wenn einer der Werte in der Map geändert wird. ` key ` ist der Schlüssel, der dem geänderten ` value ` entspricht.
Hinweis: valueChanged () wird NICHT ausgelöst, wenn Änderungen durch den Aufruf von insert() oder clear() vorgenommen werden – es wird nur ausgelöst, wenn ein Wert aus QML aktualisiert wird.
QVariant &QQmlPropertyMap::operator[](const QString &key)
Gibt den Wert zurück, der dem Schlüssel „ key “ zugeordnet ist, als bearbeitbare Referenz.
Enthält die Map keinen Eintrag mit dem Schlüssel „ key “, fügt die Funktion ein ungültiges „ QVariant “ mit dem Schlüssel „ key “ in die Map ein und gibt eine Referenz darauf zurück.
Siehe auch „ insert()“ und „ value()“.
QVariant QQmlPropertyMap::operator[](const QString &key) const
Entspricht „ value()“.
Dies ist eine überladene Funktion.
© 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.