QBindable 类

template <typename T> class QBindable

QBindable 是一个绑定启用属性的包装类。它允许类型安全的操作,同时将各种属性类之间的差异抽象化。《更多...

头文件 #include <QBindable>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承 QUntypedBindable

公共函数

QBindable(QObject *obj, const QMetaProperty &property)
QBindable(QObject *obj, const char *property)
QPropertyBinding<T>binding() const
QPropertyBinding<T>makeBinding(const QPropertyBindingSourceLocation &location = QT_PROPERTY_DEFAULT_BINDING_LOCATION) const
QPropertyBinding<T>setBinding(const QPropertyBinding<T> &binding)
QPropertyBinding<T>setBinding(Functor f)
voidsetValue(const T &value)
QPropertyBinding<T>takeBinding()
Tvalue() const

详细描述

QBindable<T> 有助于将 Qt 的传统 Q_PROPERTY绑定启用 属性整合在一起。如果一个属性由 QPropertyQObjectBindablePropertyQObjectComputedProperty 支持,则可以在 Q_PROPERTY 声明中添加 BINDABLE bindablePropertyName,其中 bindablePropertyName 是一个返回从 QProperty 构建的 QBindable 实例的函数。返回的 QBindable 允许属性用户设置和查询属性的绑定,而无需知道使用的绑定启用属性的确切类型。

class MyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int x READ x WRITE setX NOTIFY xChanged BINDABLE bindableX)
public:
    int x() const { return xProp; }
    void setX(int x) { xProp = x; }
    QBindable<int> bindableX() { return QBindable<int>(&xProp); }

signals:
    void xChanged();

private:
    // Declare the instance of the bindable property data.
    Q_OBJECT_BINDABLE_PROPERTY(MyClass, int, xProp, &MyClass::xChanged)
};
MyClass *myObject;
QBindable<int> bindableX = myObject->bindableX();
qDebug() << bindableX.hasBinding(); // prints false
QProperty<int> y {42};
bindableX.setBinding([&](){ return 2*y.value(); });
qDebug() << bindableX.hasBinding() << myObject->x(); // prints true 84

另请参阅 QMetaProperty::isBindableQPropertyQObjectBindablePropertyQObjectComputedPropertyQt 可绑定属性

成员函数文档

[明确] QBindable::QBindable(QObject *obj, const QMetaProperty &property)

请参阅 QBindable::QBindable(QObject *obj, const char *property)

[明确] QBindable::QBindable(QObject *obj, const char *property)

为对象上指定的 Q_PROPERTY 属性创建一个 QBindable。该属性必须具有 notify 信号,但其Q_PROPERTY定义中不需要具有 BINDABLE,因此即使是不了解 Q_PROPERTY 的绑定也可以进行绑定或用于绑定表达式。在使用绑定表达式时,必须使用 QBindable::value() 而不是正常的属性 READ 函数(或 MEMBER)来启用依赖跟踪,如果属性不是 BINDABLE。当使用 lambda 进行绑定时,您可能希望按值捕获 QBindable 以避免在绑定表达式中调用此构造函数的开销。不应使用此构造函数来实现Q_PROPERTYBINDABLE,因为结果Q_PROPERTY将不支持依赖跟踪。要创建一个可以直接使用而不必通过 QBindable 读取的属性,请使用 QPropertyQObjectBindableProperty

QProperty<QString> displayText;
QDateTimeEdit *dateTimeEdit = findDateTimeEdit();
QBindable<QDateTime> dateTimeBindable(dateTimeEdit, "dateTime");
displayText.setBinding([dateTimeBindable](){ return dateTimeBindable.value().toString(); });

参见:QPropertyQObjectBindablePropertyQt 可绑定属性

QPropertyBinding<T> QBindable::binding() const

返回底层属性的当前绑定。如果没有绑定属性,返回的 QPropertyBinding<T> 将是无效的。

参见:setBindinghasBinding

QPropertyBinding<T> QBindable::makeBinding(const QPropertyBindingSourceLocation &location = QT_PROPERTY_DEFAULT_BINDING_LOCATION) const

使用指定的源 location 构造一个评估为底层属性值的绑定。

QPropertyBinding<T> QBindable::setBinding(const QPropertyBinding<T> &binding)

将底层属性的绑定设置为 binding。如果 QBindable 是只读的或无效的,则不执行任何操作。

参见:bindingisReadOnly() 和 isValid

template <typename Functor> QPropertyBinding<T> QBindable::setBinding(Functor f)

这是一个重载函数。

f 创建一个 QPropertyBinding<T>,并将其设置为底层属性的绑定。

void QBindable::setValue(const T &value)

将底层属性的值设置为 value。这将从它中移除当前设置的绑定。如果 QBindable 是只读的或无效的,则此项函数没有任何效果。

参见:value()、isValid()、isReadOnly() 和 setBinding

QPropertyBinding<T> QBindable::takeBinding()

移除当前设置的底层属性绑定,并返回它。如果没有绑定,返回的 QPropertyBinding<T> 将是无效的。

参见:bindingsetBindinghasBinding

T QBindable::value() const

返回底层属性的当前值。如果QBindable无效,则返回默认构造的T

另请参阅setValue()和isValid()。

© 2024 Qt公司有限公司。此处包含的文档贡献属于各自的版权所有者。本处的文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3条款提供的使用许可。Qt和相关标志是芬兰的Qt公司及其在全球的子公司和关联公司的商标。所有其他商标均为其各自所有者的财产。