QQmlPropertyMap类
QQmlPropertyMap类允许您设置可以被QML绑定使用的关键值对。 更多...
头文件 | #include <QQmlPropertyMap> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake | QT += qml |
继承 | QObject |
公共函数
QQmlPropertyMap(QObject *parent = nullptr) | |
虚拟 | ~QQmlPropertyMap() override |
void | clear(const QString &key) |
bool | contains(const QString &key) const |
int | count() const |
(since 6.1) void | freeze() |
void | insert(const QString &key, const QVariant &value) |
(since 6.1) 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) | |
虚拟 QVariant | updateValue(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
返回映射中的键的数量。
[虚受保护]
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是已更改值的对应键。
QVariant &QQmlPropertyMap::operator[](const QString &key)
返回与关键key相关联的值的可修改引用。
如果映射中不包含与关键key相关联的项目,则该函数会在映射中将无效的QVariant插入到关键key,并返回对其的引用。
QVariant QQmlPropertyMap::operator[](const QString &key) const
这是一个重载的函数。
与value()相同。
© 2024 Qt公司。本文档内容的贡献版权属于其各自的所有者。本提供的文档根据由自由软件基金会发布的GNU自由文档许可协议版本1.3进行许可。Qt及其相关标志是芬兰及其它国家和地区的Qt公司商标。所有其它商标均为其各自所有者的财产。