QBindable 类
template <typename T> class QBindableQBindable 是一个绑定启用属性的包装类。它允许类型安全的操作,同时将各种属性类之间的差异抽象化。《更多...
头文件 | #include <QBindable> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += 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) |
void | setValue(const T &value) |
QPropertyBinding<T> | takeBinding() |
T | value() const |
详细描述
QBindable<T> 有助于将 Qt 的传统 Q_PROPERTY 与 绑定启用 属性整合在一起。如果一个属性由 QProperty、QObjectBindableProperty 或 QObjectComputedProperty 支持,则可以在 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::isBindable、QProperty、QObjectBindableProperty、QObjectComputedProperty 和 Qt 可绑定属性。
成员函数文档
[明确]
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_PROPERTY的 BINDABLE
,因为结果Q_PROPERTY将不支持依赖跟踪。要创建一个可以直接使用而不必通过 QBindable 读取的属性,请使用 QProperty 或 QObjectBindableProperty。
QProperty<QString> displayText; QDateTimeEdit *dateTimeEdit = findDateTimeEdit(); QBindable<QDateTime> dateTimeBindable(dateTimeEdit, "dateTime"); displayText.setBinding([dateTimeBindable](){ return dateTimeBindable.value().toString(); });
参见:QProperty、QObjectBindableProperty 和 Qt 可绑定属性。
QPropertyBinding<T> QBindable::binding() const
返回底层属性的当前绑定。如果没有绑定属性,返回的 QPropertyBinding<T>
将是无效的。
参见:setBinding 和 hasBinding。
QPropertyBinding<T> QBindable::makeBinding(const QPropertyBindingSourceLocation &location = QT_PROPERTY_DEFAULT_BINDING_LOCATION) const
使用指定的源 location 构造一个评估为底层属性值的绑定。
QPropertyBinding<T> QBindable::setBinding(const QPropertyBinding<T> &binding)
将底层属性的绑定设置为 binding。如果 QBindable 是只读的或无效的,则不执行任何操作。
参见:binding、isReadOnly() 和 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>
将是无效的。
参见:binding、setBinding 和 hasBinding。
T QBindable::value() const
返回底层属性的当前值。如果QBindable无效,则返回默认构造的T
。
© 2024 Qt公司有限公司。此处包含的文档贡献属于各自的版权所有者。本处的文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3条款提供的使用许可。Qt和相关标志是芬兰的Qt公司及其在全球的子公司和关联公司的商标。所有其他商标均为其各自所有者的财产。