QObjectBindableProperty Class
template <typename Class, typename T, auto Offset, auto Signal = nullptr> class QObjectBindablePropertyLa clase QObjectBindableProperty es una clase plantilla que permite la vinculación automática de propiedades para los datos de propiedades almacenados en las clases derivadas de QObject. Más...
| Cabecera: | #include <QObjectBindableProperty> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Desde: | Qt 6.0 |
| Hereda: | QPropertyData |
Esta clase es igual-comparable.
Esta clase es comparable con T.
Funciones públicas
| QObjectBindableProperty() | |
| QObjectBindableProperty(Functor &&f) | |
| QObjectBindableProperty(T &&initialValue) | |
| QObjectBindableProperty(const T &initialValue) | |
| QObjectBindableProperty(Class *owner, QPropertyBinding<T> &&binding) | |
| QObjectBindableProperty(Class *owner, const QPropertyBinding<T> &binding) | |
| ~QObjectBindableProperty() | |
| QPropertyNotifier | addNotifier(Functor f) |
| QPropertyBinding<T> | binding() const |
| bool | hasBinding() const |
| void | notify() |
| QPropertyChangeHandler<Functor> | onValueChanged(Functor f) |
| QPropertyBinding<T> | setBinding(const QPropertyBinding<T> &newBinding) |
| QPropertyBinding<T> | setBinding(Functor f) |
| bool | setBinding(const QUntypedPropertyBinding &newBinding) |
| void | setValue(QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type newValue) |
| void | setValue(QObjectBindableProperty<Class, T, Offset, Signal>::rvalue_ref newValue) |
| QPropertyChangeHandler<Functor> | subscribe(Functor f) |
| QPropertyBinding<T> | takeBinding() |
| QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type | value() const |
Macros
(since 6.0) | Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal) |
(since 6.0) | Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal) |
Descripción detallada
QObjectBindableProperty es un contenedor genérico que contiene una instancia de T y se comporta principalmente como QProperty. Es una de las clases que implementan Qt Bindable Properties. A diferencia de QProperty, almacena su estructura de datos de gestión en el entorno QObject. Los parámetros extra de la plantilla se utilizan para identificar la clase circundante y una función miembro de esa clase que actúa como gestor de cambios.
Puedes utilizar QObjectBindableProperty para añadir soporte de vinculación al código que utiliza Q_PROPERTY. Los métodos getter y setter deben adaptarse cuidadosamente según las reglas descritas en Bindable Property Getters and Setters.
Para invocar la señal de cambio en los cambios de propiedad, utiliza QObjectBindableProperty y pasa la señal de cambio como callback.
A continuación se muestra un ejemplo sencillo.
#include <QObject>#include <QProperty>#include <QDebug>class Foo : public QObject {Q_OBJECT Q_PROPERTY(int myVal READ myVal WRITE setMyVal BINDABLE bindableMyVal)public: int myVal() { return myValMember.value(); } void setMyVal(int newvalue) { myValMember = newvalue; } QBindable<int> bindableMyVal() { return &myValMember; }signals: void myValChanged();private: Q_OBJECT_BINDABLE_PROPERTY(Foo, int, myValMember, &Foo::myValChanged); };int main() { bool debugout(true); // enable debug logFoo myfoo; QProperty<int> prop(42); QObject::connect(&myfoo, &Foo::myValChanged, [&]() { if (debugout) qDebug() << myfoo.myVal(); }); myfoo.bindableMyVal().setBinding([&]() { return prop.value(); }); // imprime "42"prop = 5; // imprime "5"debugout = false; prop = 6; // no imprime nadadebugout = true; prop = 7; // imprime "7"}#include "main.moc"
QObjectBindableProperty normalmente no se usa directamente, en su lugar se crea una instancia del mismo usando la macro Q_OBJECT_BINDABLE_PROPERTY.
Utiliza la macro Q_OBJECT_BINDABLE_PROPERTY en la declaración de la clase para declarar la propiedad como bindable.
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) };
Si necesita inicializar directamente la propiedad con algún valor no predeterminado, puede utilizar la macro Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS. Acepta un valor para la inicialización como uno de sus parámetros.
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 int bindable property data and // initialize it with the value 5. // This is similar to declaring // int xProp = 5; // without using the new QObjectBindableProperty class. Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(MyClass, int, xProp, 5, &MyClass::xChanged) };
Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS no admite múltiples argumentos directamente. Si su propiedad requiere múltiples argumentos para la inicialización, por favor llame explícitamente al constructor específico.
class CustomType { public: CustomType(int val, int otherVal) : value(val), anotherValue(otherVal) { } private: int value = 0; int anotherValue = 0; }; // later when using CustomType as a property Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SomeClass, CustomType, xProp, CustomType(5, 10), &MyClass::xChanged)
El gestor de cambios puede aceptar opcionalmente un argumento, del mismo tipo que la propiedad, en cuyo caso se le pasa el nuevo valor de la propiedad. En caso contrario, no debería aceptar argumentos.
Si la propiedad no necesita una notificación de cambio, puede omitir "NOTIFY xChanged" en la macro Q_PROPERTY, así como el último argumento de las macros Q_OBJECT_BINDABLE_PROPERTY y Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS.
Véase también Q_OBJECT_BINDABLE_PROPERTY, Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS, QProperty, QObjectComputedProperty, Qt 's Property System, y Qt Bindable Properties.
Documentación de funciones miembro
QObjectBindableProperty::QObjectBindableProperty()
Construye una propiedad con una instancia de T construida por defecto.
[explicit] template <typename Functor> QObjectBindableProperty::QObjectBindableProperty(Functor &&f)
Crea una propiedad vinculada a la expresión de vinculación proporcionada f. El valor de la propiedad se establece con el resultado de la evaluación de la nueva vinculación. Cada vez que cambie una dependencia de la vinculación, ésta se volverá a evaluar y el valor de la propiedad se actualizará en consecuencia.
[explicit] QObjectBindableProperty::QObjectBindableProperty(T &&initialValue)
Move-Construye una propiedad con la dirección initialValue.
[explicit] QObjectBindableProperty::QObjectBindableProperty(const T &initialValue)
Construye una propiedad con la dirección initialValue.
[default] QObjectBindableProperty::QObjectBindableProperty(Class *owner, QPropertyBinding<T> &&binding)
Crea una propiedad vinculada a la expresión binding proporcionada. El valor de la propiedad se establece en el resultado de la evaluación del nuevo enlace. Siempre que cambie una dependencia de la vinculación, ésta se volverá a evaluar y el valor de la propiedad se actualizará en consecuencia.
Cuando cambia el valor de la propiedad, se notifica a owner a través de la función Callback.
[default] QObjectBindableProperty::QObjectBindableProperty(Class *owner, const QPropertyBinding<T> &binding)
Crea una propiedad vinculada a la expresión binding proporcionada. El valor de la propiedad se establece en el resultado de la evaluación del nuevo enlace. Siempre que cambie una dependencia de la vinculación, ésta se volverá a evaluar y el valor de la propiedad se actualizará en consecuencia.
Cuando cambia el valor de la propiedad, se notifica a owner a través de la función Callback.
[default] QObjectBindableProperty::~QObjectBindableProperty()
Destruye la propiedad.
template <typename Functor> QPropertyNotifier QObjectBindableProperty::addNotifier(Functor f)
Suscribe el functor dado f como una llamada de retorno que se llama cada vez que cambia el valor de la propiedad.
Se espera que la llamada de retorno f sea de un tipo que tenga un operador de llamada simple () sin ningún parámetro. Esto significa que puedes proporcionar una expresión lambda de C++, una función std::function o incluso una estructura personalizada con un operador de llamada.
El objeto manejador de cambio de propiedad devuelto mantiene un seguimiento de la suscripción. Cuando sale del ámbito, se cancela la suscripción a la llamada de retorno.
Este método es en algunos casos más fácil de usar que onValueChanged(), ya que el objeto devuelto no es una plantilla. Por lo tanto, puede almacenarse más fácilmente, por ejemplo, como miembro de una clase.
Véase también onValueChanged() y subscribe().
QPropertyBinding<T> QObjectBindableProperty::binding() const
Devuelve la expresión de vinculación que está asociada a esta propiedad. Se devolverá un QPropertyBinding<T> construido por defecto si no existe tal asociación.
Véase también setBinding().
bool QObjectBindableProperty::hasBinding() const
Devuelve true si la propiedad está asociada a un enlace; false en caso contrario.
void QObjectBindableProperty::notify()
Señala programáticamente un cambio de la propiedad. Cualquier vinculación que dependa de ella será notificada, y si la propiedad tiene una señal, ésta será emitida.
Esto puede ser útil en combinación con setValueBypassingBindings para aplazar la señalización del cambio hasta que se haya restaurado una invariante de la clase.
Nota: Si esta propiedad tiene un enlace (es decir, hasBinding() devuelve true), ese enlace no se reevalúa cuando se llama a notify(). Cualquier vinculación que dependa de esta propiedad se reevalúa de la forma habitual.
Véase también Qt::beginPropertyUpdateGroup() y setValueBypassingBindings().
template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::onValueChanged(Functor f)
Registra el functor dado f como una llamada de retorno que será llamada cada vez que cambie el valor de la propiedad. En cada cambio de valor, el manejador es llamado inmediatamente, o diferido, dependiendo del contexto.
Se espera que la llamada de retorno f sea de un tipo que tenga un operador de llamada simple () sin ningún parámetro. Esto significa que puedes proporcionar una expresión lambda de C++, una función std::function o incluso una estructura personalizada con un operador de llamada.
El objeto manejador de cambio de propiedad devuelto mantiene el registro. Cuando sale del ámbito, la llamada de retorno se desregistra.
QPropertyBinding<T> QObjectBindableProperty::setBinding(const QPropertyBinding<T> &newBinding)
Asocia el valor de esta propiedad con la expresión newBinding proporcionada y devuelve el enlace asociado previamente. El valor de la propiedad se establece en el resultado de la evaluación del nuevo enlace. Cada vez que cambie una dependencia de la vinculación, ésta se volverá a evaluar y el valor de la propiedad se actualizará en consecuencia. Cuando cambia el valor de la propiedad, se notifica al propietario mediante la función Callback.
Véase también binding().
template <typename Functor> QPropertyBinding<T> QObjectBindableProperty::setBinding(Functor f)
Asocia el valor de esta propiedad con el functor proporcionado f y devuelve la vinculación previamente asociada. El valor de la propiedad se establece con el resultado de evaluar el nuevo enlace invocando al operador de llamada () de f. Cada vez que cambie una dependencia del enlace, éste se volverá a evaluar y el valor de la propiedad se actualizará en consecuencia.
Cuando cambia el valor de la propiedad, se notifica al propietario a través de la función Callback.
Se trata de una función sobrecargada.
Véase también Formulación de un enlace de propiedad.
bool QObjectBindableProperty::setBinding(const QUntypedPropertyBinding &newBinding)
Asocia el valor de esta propiedad con la expresión newBinding proporcionada. El valor de la propiedad se establece con el resultado de la evaluación del nuevo enlace. Cada vez que cambie una dependencia de la vinculación, ésta se volverá a evaluar y el valor de la propiedad se actualizará en consecuencia.
Devuelve true si el tipo de esta propiedad es el mismo que el que devuelve la función de vinculación; false en caso contrario.
Se trata de una función sobrecargada.
void QObjectBindableProperty::setValue(QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type newValue)
void QObjectBindableProperty::setValue(QObjectBindableProperty<Class, T, Offset, Signal>::rvalue_ref newValue)
Asigna newValue a esta propiedad y elimina el enlace asociado a la propiedad, si está presente. Si el valor de la propiedad cambia como resultado, llama a la función Callback en owner.
template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::subscribe(Functor f)
Suscribe el functor dado f como una llamada de retorno que se llama inmediatamente y siempre que el valor de la propiedad cambie en el futuro. En cada cambio de valor, el manejador es llamado inmediatamente, o diferido, dependiendo del contexto.
Se espera que la llamada de retorno f sea de un tipo que tenga un operador de llamada simple () sin ningún parámetro. Esto significa que puedes proporcionar una expresión lambda de C++, una función std::function o incluso una estructura personalizada con un operador de llamada.
El objeto manejador de cambio de propiedad devuelto mantiene un seguimiento de la suscripción. Cuando sale del ámbito, la llamada de retorno se desuscribe.
QPropertyBinding<T> QObjectBindableProperty::takeBinding()
Disocia la expresión de vinculación de esta propiedad y la devuelve. Después de llamar a esta función, el valor de la propiedad sólo cambiará si se le asigna un nuevo valor, o cuando se establezca un nuevo enlace.
QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type QObjectBindableProperty::value() const
Devuelve el valor de la propiedad. Puede evaluar una expresión vinculante ligada a esta propiedad antes de devolver el valor.
Véase también setValue().
Documentación de macros
[since 6.0] Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal)
Declara un QObjectBindableProperty dentro de containingClass de tipo type con nombre name. Si se da el argumento opcional signal, esta señal se emitirá cuando la propiedad se marque como sucia.
Esta macro se introdujo en Qt 6.0.
Véase también Sistema de propiedades de Qt y Propiedades enlazables de Qt.
[since 6.0] Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal)
Declara un QObjectBindableProperty dentro de containingClass de tipo type con nombre name que se inicializa a initialvalue. Si se da el argumento opcional signal, esta señal se emitirá cuando la propiedad se marque como sucia.
Esta macro se introdujo en Qt 6.0.
Véase también Sistema de propiedades de Qt y Propiedades enlazables de Qt.
© 2026 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.