QProperty 类

模板 <typename T> class QProperty

QProperty 类是一个模板类,它能够启用自动属性绑定。 更多...

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

公共函数

QProperty()
QProperty(const QPropertyBinding<T> &binding)
QProperty(Functor &&f)
QProperty(const T &initialValue)
QProperty(T &&initialValue)
~QProperty()
QPropertyNotifieraddNotifier(Functor f)
QPropertyBinding<T>binding() const
QPropertyChangeHandler<Functor>onValueChanged(Functor f)
QPropertyBinding<T>setBinding(const QPropertyBinding<T> &newBinding)
boolsetBinding(const QUntypedPropertyBinding &newBinding)
QPropertyBinding<T>setBinding(Functor f)
voidsetValue(QProperty<T>::rvalue_ref newValue)
voidsetValue(QProperty<T>::parameter_type newValue)
QPropertyChangeHandler<Functor>subscribe(Functor f)
QPropertyBinding<T>takeBinding()
QProperty<T>::parameter_typevalue() const
QProperty<T> &operator=(QProperty<T>::rvalue_ref newValue)
QProperty<T> &operator=(QProperty<T>::parameter_type newValue)
(since 6.2) voidbeginPropertyUpdateGroup()
(since 6.2) voidendPropertyUpdateGroup()

详细描述

QProperty<T> 是实现 Qt 可绑定属性 的类之一。它是一个容器,用于存储 T 类型的实例。你可以为其赋值,并通过 value() 函数或 T 转换操作符读取它。你还可以将属性绑定到一个计算值的表达式上,称为绑定表达式。它用 C++ lambda 表达式表示,可以用来表达应用程序中不同属性之间的关系。

注意:对于QML,将QPropertyQ_PROPERTY的方式暴露,并使用BINDABLE关键字是非常重要的。结果,QML引擎将其用作可绑定接口来设置属性绑定。反过来,绑定可以通过标准API与C++进行交互:QProperty::onValueChanged,QProperty::takeBinding和QBindable::hasBinding。如果属性是BINDABLE,则引擎将使用C++属性系统固有的变化跟踪来通知变化,并且不会依赖于信号被发出。

成员函数文档

void QProperty::setValue(QProperty<T>::parameter_type newValue)

void QProperty::setValue(QProperty<T>::rvalue_ref newValue)

newValue赋值给此属性,如果存在将删除属性的相关绑定。

QProperty<T> &QProperty::operator=(QProperty<T>::parameter_type newValue)

QProperty<T> &QProperty::operator=(QProperty<T>::rvalue_ref newValue)

newValue赋值给此属性,并返回对此QProperty的引用。

QProperty::QProperty()

使用T的默认构造函数构造属性。

[显式] QProperty::QProperty(const QPropertyBinding<T> &binding)

构造一个与提供的binding表达式相关的属性。属性的值设置为评估新绑定后的结果。当绑定的依赖项发生变化时,将重新评估绑定,并相应更新属性的值。

[显式] template <typename Functor> QProperty::QProperty(Functor &&f)

构造一个与提供的绑定表达式f相关的属性。属性的值设置为评估新绑定后的结果。当绑定依赖项发生变化时,将重新评估绑定,并相应更新属性的值。

[显式默认] QProperty::QProperty(const T &initialValue)

使用提供的initialValue构造属性。

[显式默认] QProperty::QProperty(T &&initialValue)

移动构造函数,使用提供的initialValue构造属性。

QProperty::~QProperty()

销毁属性。

template <typename Functor> QPropertyNotifier QProperty::addNotifier(Functor f)

将给定的函数 f 订阅为一个回调,每当属性值变化时都会调用它。

期望回调 f 是一种具有纯调用操作符 () 且不带任何参数的类型。这意味着您可以提供 C++ 的 lambda 表达式,std::function 或自定义具有调用操作符的结构体。

返回的属性变化处理对象跟踪订阅。当其超出作用域时,回调将取消订阅。

在某些情况下,此方法比 onValueChanged() 更易于使用,因为返回的对象不是模板。因此,它更容易被存储,例如作为类的成员。

另请参阅onValueChanged() 和 subscribe()。

QPropertyBinding<T> QProperty::binding() const

返回与此属性关联的绑定表达式。如果没有此类关联,则返回由默认构造的 QPropertyBinding<T>。

另请参阅setBinding()。

template <typename Functor> QPropertyChangeHandler<Functor> QProperty::onValueChanged(Functor f)

注册给定的函数 f 作为每当属性值变化时将调用的回调。在每次值变化时,处理程序要么立即调用,要么根据上下文延迟调用。

期望回调 f 是一种具有纯调用操作符 () 且不带任何参数的类型。这意味着您可以提供 C++ 的 lambda 表达式,std::function 或自定义具有调用操作符的结构体。

返回的属性变化处理对象跟踪注册。当其超出作用域时,回调将取消注册。

QPropertyBinding<T> QProperty::setBinding(const QPropertyBinding<T> &newBinding)

将此属性的值与提供的 newBinding 表达式关联,并返回先前关联的绑定。属性的值设置为评估新绑定后的结果。每当绑定的依赖项发生变化时,绑定将重新评估,并相应地更新属性的值。

另请参阅binding()。

bool QProperty::setBinding(const QUntypedPropertyBinding &newBinding)

这是一个重载函数。

将此属性的值与提供的 newBinding 表达式关联。属性的值设置为评估新绑定后的结果。每当绑定的依赖项发生变化时,绑定将重新评估,并相应地更新属性的值。

如果此属性的类型与绑定函数返回的类型相同,则返回 true;否则返回 false。

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

这是一个重载函数。

将此属性的值与提供的函数 f 关联,并返回先前关联的绑定。属性的值设置为评估新绑定后的结果。每当绑定的依赖项发生变化时,绑定将重新评估,并相应地更新属性的值。

另请参阅定义属性绑定

template <typename Functor> QPropertyChangeHandler<Functor> QProperty::subscribe(Functor f)

将给定的二元运算符f作为回调立即调用,并在未来属性值变化时也进行调用。每次值变化时,处理程序要么立即调用,要么根据上下文进行延迟。

预期的回调f应为一个可复制类型,拥有一个不带任何参数的纯call()操作符。这意味着您可以提供一个C++ lambda表达式、std::function或者一个带call操作符的自定义结构。

返回的属性变化处理对象跟踪订阅。当其超出作用域时,回调将取消订阅。

QPropertyBinding<T> QProperty::takeBinding()

将绑定表达式从该属性中解绑并返回。调用此函数后,属性值的变化仅限于您为它分配新值或设置新的绑定。

QProperty<T>::parameter_type QProperty::value() const

返回属性值。在返回值之前,可能会计算与属性绑定的绑定表达式。

另请参阅setValue()。

相关非成员

[自6.2起] void beginPropertyUpdateGroup()

标记属性更新组的开始。在此组内,更改属性既不立即更新任何依赖属性,也不触发更改通知。这些都是在通过调用endPropertyUpdateGroup结束组后才会延迟处理的。

组可以是嵌套的。在这种情况下,延迟只在最外层组被结束后才结束。

注意:只有在组内受影响的属性值都更新到新值之后,才会发送更改通知。这允许在需要更新多个属性时重新建立类的不变性,防止任何外部观察者注意到不一致的状态。

此功能是在Qt 6.2中引入的。

另请参阅Qt::endPropertyUpdateGroupQScopedPropertyUpdateGroup

[自6.2起] void endPropertyUpdateGroup()

结束属性更新组。如果最外层组已结束,则现在将执行延迟的绑定评估和通知。

警告:在没有先调用beginPropertyUpdateGroup之前调用endPropertyUpdateGroup会导致未定义的行为。

此功能是在Qt 6.2中引入的。

另请参阅Qt::beginPropertyUpdateGroupQScopedPropertyUpdateGroup

© 2024 Qt公司有限公司。在此包含的文档贡献的版权归其各自的所有者。在此提供的文档是根据由自由软件基金会发布的GNU自由文档许可第1.3版的条款授权的。Qt及其 respective 标志是芬兰以及/或全球其他国家的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。