QObjectComputedProperty 类

template <typename Class, typename T, auto Offset, auto Getter> class QObjectComputedProperty

QObjectComputedProperty 类是一个模板类,旨在帮助将旧的属性迁移到可绑定属性系统。 更多...

头文件 #include <QObjectComputedProperty>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += 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_PROPERTYQPropertyQObjectBindablePropertyQt 的属性系统Qt 可绑定属性

宏说明

[since 6.0] Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback)

containingClass类型中声明一个名为nametype类型的QObjectComputedProperty。参数callback指定了一个当属性被评估时调用的GETTER函数。

此宏在Qt 6.0中引入。

另请参阅QObjectBindablePropertyQt属性系统Qt可绑定属性

© 2024 Qt公司。本文件中包含的文档贡献均为各自所有者的版权所属。本文件提供的文档遵循自由软件基金会发布的GNU自由文档许可证版本1.3的条款。Qt及其相关商标是芬兰及/或全球其他地区的Qt公司商标。所有其他商标均为各自所有者的财产。