QObjectComputedProperty 类
template <typename Class, typename T, auto Offset, auto Getter> class QObjectComputedPropertyQObjectComputedProperty 类是一个模板类,旨在帮助将旧的属性迁移到可绑定属性系统。 更多...
头文件 | #include <QObjectComputedProperty> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
自从 | Qt 6.0 |
继承自 | QUntypedPropertyData |
宏
(自从 6.0) | Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback) |
详细描述
QObjectComputedProperty 是一个只读属性,每次读取时都会重新计算。它不会存储计算值。它是实现 Qt 可绑定属性 的内部类之一。QObjectComputedProperty 通常不直接使用,而是通过使用 Q_OBJECT_COMPUTED_PROPERTY 宏来创建其实例。
请参见以下示例。
class Client{}; class MyClassPrivate : public QObjectPrivate { public: QList<Client> clients; bool hasClientsActualCalculation() const { return clients.size() > 0; } Q_OBJECT_COMPUTED_PROPERTY(MyClassPrivate, bool, hasClientsData, &MyClassPrivate::hasClientsActualCalculation) }; class MyClass : public QObject { Q_OBJECT Q_PROPERTY(bool hasClients READ hasClients STORED false BINDABLE bindableHasClients) public: QBindable<bool> bindableHasClients() { return QBindable<bool>(&d_func()->hasClientsData); } bool hasClients() const { return d_func()->hasClientsData.value(); } void addClient(const Client &c) { Q_D(MyClass); d->clients.push_back(c); // notify that the value could have changed d->hasClientsData.notify(); } private: Q_DECLARE_PRIVATE(MyClass) };
绑定属性获取器和设置器 的规则也适用于 QObjectComputedProperty。特别是,获取器应该是平凡的,并且只返回 QObjectComputedProperty 对象的值。提供给 QObjectComputedProperty 的回调通常应该是一个私有的方法,只由 QObjectComputedProperty 调用。
由于 QObjectComputedProperty 是只读的,因此不需要或允许设置器。
为了正确地参与依赖关系处理,QObjectComputedProperty 必须知道其值,即提供给它的回调函数的结果可能会发生变化。每当在回调函数中使用的可绑定属性改变时,这就会自动发生。如果回调函数的结果可能会因为某个不可绑定属性值的改变而改变,那么调用开发者有责任在 QObjectComputedProperty 对象上调用 notify
。这将通知相关属性可能存在的变化。
请注意,调用 notify
可能会触发依赖属性中的更改处理器,这可能会反过来使用 QObjectComputedProperty 成员所属的对象。因此,不应在过渡状态或无效状态下调用 notify
。
由于 QObjectComputedProperty 不适合用于依赖于可能随时改变输入的计算,因此不适合与之一起使用,例如文件的 contents。
另见Q_OBJECT_COMPUTED_PROPERTY,QProperty,QObjectBindableProperty,Qt 的属性系统 和 Qt 可绑定属性。
© 2024 Qt公司。本文件中包含的文档贡献均为各自所有者的版权所属。本文件提供的文档遵循自由软件基金会发布的GNU自由文档许可证版本1.3的条款。Qt及其相关商标是芬兰及/或全球其他地区的Qt公司商标。所有其他商标均为各自所有者的财产。