QProperty Class

template <typename T> class QProperty

QProperty 类是一个模板类,可实现自动属性绑定。更多

头文件: #include <QProperty>
CMake.QProperty find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Qt 6.0
继承: QPropertyData

公共函数

QProperty()
QProperty(Functor &&f)
QProperty(T &&initialValue)
QProperty(const QPropertyBinding<T> &binding)
QProperty(const T &initialValue)
~QProperty()
QPropertyNotifier addNotifier(Functor f)
QPropertyBinding<T> binding() const
QPropertyChangeHandler<Functor> onValueChanged(Functor f)
QPropertyBinding<T> setBinding(const QPropertyBinding<T> &newBinding)
QPropertyBinding<T> setBinding(Functor f)
bool setBinding(const QUntypedPropertyBinding &newBinding)
void setValue(QProperty<T>::parameter_type newValue)
void setValue(QProperty<T>::rvalue_ref newValue)
QPropertyChangeHandler<Functor> subscribe(Functor f)
QPropertyBinding<T> takeBinding()
QProperty<T>::parameter_type value() const
QProperty<T> &operator=(QProperty<T>::parameter_type newValue)
QProperty<T> &operator=(QProperty<T>::rvalue_ref newValue)
(since 6.2) void beginPropertyUpdateGroup()
(since 6.2) void endPropertyUpdateGroup()

详细描述

QProperty<T> 是实现Qt 可绑定属性的类之一。它是一个容纳 T 实例的容器。您可以为其赋值,也可以通过value() 函数或 T 转换操作符读取该值。您还可以将属性与动态计算值的表达式(即绑定表达式)绑定。它以 C++ lambda 表示,可用于表达应用程序中不同属性之间的关系。

注: 对于 QML,重要的是在Q_PROPERTY 中使用 BINDABLE 关键字公开QProperty 。因此,QML 引擎会将其作为可绑定接口来设置属性绑定。反过来,绑定可以通过正常的 API 与 C++ 进行交互:QProperty<T>::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 的默认构造实例构造一个属性。

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

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

[explicit default] QProperty::QProperty(T &&initialValue)

移动-使用提供的initialValue 构建一个属性。

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

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

[explicit default] QProperty::QProperty(const T &initialValue)

用提供的initialValue 构建一个属性。

QProperty::~QProperty()

破坏财产。

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

将给定的函数f 订阅为回调,每当属性值发生变化时就会调用该回调。

回调f 应该是一个不带任何参数的普通调用操作符类型() 。这意味着您可以提供 C++ lambda 表达式、std::函数,甚至是带有调用操作符的自定义结构体。

返回的属性更改处理程序对象会跟踪订阅。当它退出作用域时,回调将被取消订阅。

在某些情况下,这种方法比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::函数,甚至是带有调用操作符的自定义结构体。

返回的属性更改处理程序对象会跟踪注册情况。当它退出作用域时,回调将被注销。

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

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

另请参见 binding()。

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

这是一个重载函数。

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

另请参阅 制定属性绑定

bool QProperty::setBinding(const QUntypedPropertyBinding &newBinding)

这是一个重载函数。

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

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

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

将给定的函数式f 作为回调函数订阅,该回调函数会在属性值发生变化时立即调用。每次属性值发生变化时,都会根据上下文立即或延迟调用处理程序。

回调f 应该是一种可以复制的类型,并具有不带任何参数的普通调用操作符()。这意味着你可以提供 C++ lambda 表达式、std::函数,甚至是带有调用操作符的自定义结构体。

返回的属性更改处理程序对象会跟踪订阅。当它退出作用域时,回调将被取消订阅。

QPropertyBinding<T> QProperty::takeBinding()

解除绑定表达式与该属性的关联并返回绑定表达式。调用此函数后,该属性的值只有在赋值或设置新绑定时才会改变。

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

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

另请参阅 setValue()。

相关非成员

[since 6.2] void beginPropertyUpdateGroup()

标志着一个属性更新组的开始。在该组中,更改一个属性既不会立即更新任何从属属性,也不会触发更改通知。更改通知将被延迟,直到调用endPropertyUpdateGroup 结束该组。

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

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

此功能在 Qt 6.2 中引入。

另请参阅 Qt::endPropertyUpdateGroupQScopedPropertyUpdateGroup

[since 6.2] void endPropertyUpdateGroup()

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

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

此函数在 Qt 6.2 中引入。

另请参阅 Qt::beginPropertyUpdateGroupQScopedPropertyUpdateGroup

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.