Класс QQmlPropertyMap
Класс QQmlPropertyMap позволяет задавать пары ключ-значение, которые могут использоваться в связываниях QML. Подробнее...
| Заголовок: | #include <QQmlPropertyMap> |
| CMake: | find_package(Qt6 COMPONENTS Qml REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += qml |
| Наследует: | QObject |
Открытые функции
| QQmlPropertyMap(QObject *parent = nullptr) | |
| virtual | ~QQmlPropertyMap() override |
| void | clear(const QString &key) |
| bool | contains(const QString &key) const |
| int | count() const |
| void | freeze() |
| void | insert(const QString &key, const QVariant &value) |
| void | insert(const QVariantHash &values) |
| 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 |
Сигналы
| void | valueChanged(const QString &key, const QVariant &value) |
Защищенные функции
| QQmlPropertyMap(DerivedType *derived, QObject *parent) | |
| virtual QVariant | updateValue(const QString &key, const QVariant &input) |
Подробное описание
QQmlPropertyMap предоставляет удобный способ экспонирования данных области в слой пользовательского интерфейса. Следующий пример демонстрирует, как можно объявлять данные в C++ и затем получать доступ к ним в QML.
В файле 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(); Затем, в main.qml:
Text { text: owner.name + " " + owner.phone } Связывание динамическое - всякий раз, когда обновляется значение ключа, все, что связано с этим ключом, также будет обновлено.
Для обнаружения изменений значений, выполненных в слое пользовательского интерфейса, вы можете подключиться к сигналу valueChanged(). Однако обратите внимание, что valueChanged() НЕ испускается при выполнении изменений с помощью вызовов insert() или clear() - он испускается только при обновлении значения из QML.
Примечание: Невозможно удалять ключи из карты; после добавления ключа вы можете только изменить или очистить связанное с ним значение.
Примечание: При наследовании класса от QQmlPropertyMap используйте защищенный конструктор с двумя аргументами, который гарантирует правильную регистрацию класса в системе метаобъектов Qt Meta-Object System.
Примечание: QMetaObject QQmlPropertyMap генерируется и изменяется динамически. Операции с этим метаобъектом не являются потокобезопасными, поэтому приложениям необходимо позаботиться об явной синхронизации доступа к метаобъекту.
Документация по членам функции
[protected] template <typename DerivedType> QQmlPropertyMap::QQmlPropertyMap(DerivedType *derived, QObject *parent)
Создает связываемую карту с родительским объектом parent. Используйте этот конструктор в классах, наследуемых от QQmlPropertyMap.
Тип derived используется для регистрации карты свойств в системе метаобъектов, что необходимо для обеспечения доступа к свойствам производного класса. Этот тип должен быть производным от QQmlPropertyMap.
QQmlPropertyMap::QQmlPropertyMap(QObject *parent = nullptr)
Создает связываемую карту с родительским объектом parent.
[signal] void QQmlPropertyMap::valueChanged(const QString &key, const QVariant &value)
Этот сигнал испускается всякий раз, когда одно из значений в карте изменяется. key - ключ, соответствующий измененному value.
Примечание: valueChanged() НЕ испускается при выполнении изменений с помощью вызовов insert() или clear() - он испускается только при обновлении значения из QML.
[override virtual] QQmlPropertyMap::~QQmlPropertyMap()
Уничтожает связываемую карту.
void QQmlPropertyMap::clear(const QString &key)
Очищает значение (если оно есть) по ключу key.
bool QQmlPropertyMap::contains(const QString &key) const
Возвращает true, если карта содержит key.
См. также size().
int QQmlPropertyMap::count() const
Это перегруженная функция.
То же самое, что и size().
[since 6.1] void QQmlPropertyMap::freeze()
Запрещает добавление других свойств в эту карту свойств. Существующие свойства могут быть изменены или очищены.
В свою очередь, для существующих свойств включается внутренняя кэш-память, что может привести к более быстрому доступу из QML.
Эта функция была добавлена в Qt 6.1.
void QQmlPropertyMap::insert(const QString &key, const QVariant &value)
Устанавливает значение, связанное с key, на value.
Если ключ не существует, он автоматически создается.
[since 6.1] void QQmlPropertyMap::insert(const QVariantHash &values)
Вставляет values в QQmlPropertyMap.
Ключи, которых нет, автоматически создаются.
Этот метод значительно быстрее, чем вызов insert(key, value) много раз подряд.
Эта функция была добавлена в Qt 6.1.
bool QQmlPropertyMap::isEmpty() const
Возвращает true, если карта не содержит ключей; в противном случае возвращает false.
См. также size().
[invokable] QStringList QQmlPropertyMap::keys() const
Возвращает список ключей.
Ключи, которые были очищены, по-прежнему будут отображаться в этом списке, даже если связанные с ними значения являются недопустимыми QVariant.
Примечание: Эта функция может вызываться через систему метаобъектов и из QML. См. Q_INVOKABLE.
int QQmlPropertyMap::size() const
Возвращает количество ключей в карте.
См. также isEmpty() и count().
[virtual protected] QVariant QQmlPropertyMap::updateValue(const QString &key, const QVariant &input)
Возвращает новое значение, которое должно быть сохранено для ключа key. Эта функция предназначена для перехвата обновлений свойства из QML, где предоставленное из QML значение - input.
Переопределите эту функцию, чтобы манипулировать значением свойства при его обновлении. Обратите внимание, что эта функция вызывается только при обновлении значения из QML.
QVariant QQmlPropertyMap::value(const QString &key) const
Возвращает значение, связанное с key.
Если для данного ключа не было установлено значение (или значение было очищено), возвращается недействительный QVariant.
QVariant &QQmlPropertyMap::operator[](const QString &key)
Возвращает значение, связанное с ключом key, как ссылку для изменения.
Если в отображении нет элемента с ключом key, функция вставляет недействительный QVariant в отображение с ключом key и возвращает ссылку на него.
QVariant QQmlPropertyMap::operator[](const QString &key) const
Это перегруженная функция.
То же самое, что и value().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qqmlpropertymap.html