QQmlPropertyMap类

QQmlPropertyMap类允许您设置可以被QML绑定使用的关键值对。 更多...

头文件 #include <QQmlPropertyMap>
CMakefind_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmakeQT += qml
继承 QObject

公共函数

QQmlPropertyMap(QObject *parent = nullptr)
虚拟~QQmlPropertyMap() override
voidclear(const QString &key)
boolcontains(const QString &key) const
intcount() const
(since 6.1) voidfreeze()
voidinsert(const QString &key, const QVariant &value)
(since 6.1) voidinsert(const QVariantHash &values)
boolisEmpty() const
QStringListkeys() const
intsize() const
QVariantvalue(const QString &key) const
QVariant &operator[](const QString &key)
QVariantoperator[](const QString &key) const

信号

voidvalueChanged(const QString &key, const QVariant &value)

保护函数

QQmlPropertyMap(DerivedType *derived, QObject *parent)
虚拟 QVariantupdateValue(const QString &key, const QVariant &input)

详细描述

QQmlPropertyMap提供了一种方便的方式将领域数据暴露给UI层。以下例子展示了如何在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 }

绑定是动态的——每当键的值被更新时,绑定到该键的任何内容也会更新。

要检测UI层面的值变化,您可以连接到valueChanged()信号。但是请注意,valueChanged()在调用insert()或clear()进行更改时不会发出通知——它仅当从QML更新一个值时才会发出。

注意:无法从映射中删除键;一旦添加了键,就只能修改或清除其关联的值。

注意:从QQmlPropertyMap派生类时,请使用受保护的二参数构造函数,该构造函数确保类已正确注册到Qt的元对象系统

注意:QQmlPropertyMap的QMetaObject是动态生成和修改的。对该元对象的操作不是线程安全的,因此应用程序需要确保显式同步对元对象的访问。

成员函数文档

[显式] QQmlPropertyMap::QQmlPropertyMap(QObject *parent = nullptr)

使用父对象parent构建一个可绑定映射。

[保护] template <typename DerivedType> QQmlPropertyMap::QQmlPropertyMap(DerivedType *derived, QObject *parent)

使用父对象parent构建一个可绑定映射。在从QQmlPropertyMap派生的类中使用此构造函数。

derived的类型用于将属性映射注册到元对象系统,这是确保派生类的属性可访问所必需的。此类型必须从QQmlPropertyMap派生。

[覆盖虚拟noexcept] QQmlPropertyMap::~QQmlPropertyMap()

销毁可绑定映射。

void QQmlPropertyMap::clear(const QString &key)

清除与key关联的值(如果存在)。

bool QQmlPropertyMap::contains(const QString &key) const

如果映射包含key,则返回true。

另请参阅size()。

int QQmlPropertyMap::count() const

这是一个重载的函数。

等同于size()。

[自6.1起] void QQmlPropertyMap::freeze()

不允许将任何更多属性添加到此属性映射。现有的属性可以修改或清除。

相应地,会开启现有属性的内联缓存,这可能会导致从QML访问更快。

此函数在Qt 6.1中引入。

void QQmlPropertyMap::insert(const QString &key, const QVariant &value)

将与key关联的值设置为value

如果键不存在,则自动创建。

[自6.1起] void QQmlPropertyMap::insert(const QVariantHash &values)

将值插入到QQmlPropertyMap

不存在的键会自动创建。

这个方法比多次连续调用insert(key, value)要快得多。

此函数在Qt 6.1中引入。

bool QQmlPropertyMap::isEmpty() const

如果该映射不包含任何键,则返回true;否则返回false。

另请参阅size()。

[可调用] QStringList QQmlPropertyMap::keys() const

返回键的列表。

即使关联的值是无效的QVariants,也已经清除的键仍会出现在此列表中。

注意:此函数可以通过元对象系统从QML调用。请参阅Q_INVOKABLE

int QQmlPropertyMap::size() const

返回映射中的键的数量。

另请参阅isEmpty()和count

[虚受保护] QVariant QQmlPropertyMap::updateValue(const QString &key, const QVariant &input)

返回应存储与键key相关的新值。此函数提供用于截获从QML提供的值(即input)的属性更新。

重写此函数以更改属性值。请注意,此函数仅在值从QML更新时调用。

QVariant QQmlPropertyMap::value(const QString &key) const

返回与关键key相关联的值。

如果没有设置此键的值(或者如果已清除值),则返回无效的QVariant

[信号] void QQmlPropertyMap::valueChanged(const QString &key, const QVariant &value)

每当映射中的一个值发生变化时,都会发出此信号。key是已更改值的对应键。

注意:valueChanged()在调用insert()或clear()时不会发出 - 仅当值从QML更新时才会发出。

QVariant &QQmlPropertyMap::operator[](const QString &key)

返回与关键key相关联的值的可修改引用。

如果映射中不包含与关键key相关联的项目,则该函数会在映射中将无效的QVariant插入到关键key,并返回对其的引用。

另请参阅insert()和value

QVariant QQmlPropertyMap::operator[](const QString &key) const

这是一个重载的函数。

value()相同。

© 2024 Qt公司。本文档内容的贡献版权属于其各自的所有者。本提供的文档根据由自由软件基金会发布的GNU自由文档许可协议版本1.3进行许可。Qt及其相关标志是芬兰及其它国家和地区的Qt公司商标。所有其它商标均为其各自所有者的财产。