QObjectComputedProperty Class
template <typename Class, typename T, auto Offset, auto Getter> class QObjectComputedPropertyLa clase QObjectComputedProperty es una clase plantilla para ayudar a portar antiguas propiedades al sistema de propiedades enlazables. Más...
| Cabecera: | #include <QObjectComputedProperty> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Desde: | Qt 6.0 |
| Hereda de: | QUntypedPropertyData |
Macros
(since 6.0) | Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback) |
Descripción Detallada
QObjectComputedProperty es una propiedad de sólo lectura que se recalcula en cada lectura. No almacena el valor calculado. Es una de las clases internas de Qt que implementan Qt Bindable Properties. QObjectComputedProperty no suele utilizarse directamente, sino que se crea una instancia de la misma utilizando la macro Q_OBJECT_COMPUTED_PROPERTY.
Véase el siguiente ejemplo.
class Client{}; class MyClassPrivate : public QObject { public: QList<Client> clients; bool hasClientsActualCalculation() const { return clients.size() > 0; } Q_OBJECT_COMPUTED_PROPERTY(MyClassPrivate, bool, hasClientsData, &MyClassPrivate::hasClientsActualCalculation) }; class MyClass : public QObject { Q_OBJECT Q_PROPERTY(bool hasClients READ hasClients STORED false BINDABLE bindableHasClients) public: QBindable<bool> bindableHasClients() { return QBindable<bool>(&d_func()->hasClientsData); } bool hasClients() const { return d_func()->hasClientsData.value(); } void addClient(const Client &c) { Q_D(MyClass); d->clients.push_back(c); // notify that the value could have changed d->hasClientsData.notify(); } private: Q_DECLARE_PRIVATE(MyClass) };
Las reglas para getters en Bindable Property Getters and Setters también se aplican para QObjectComputedProperty. Especialmente, el getter debe ser trivial y solo devolver el valor del objeto QObjectComputedProperty. El callback dado al QObjectComputedProperty debe ser normalmente un metodo privado que solo sea llamado por el QObjectComputedProperty.
No se requiere ni se permite ningún setter, ya que QObjectComputedProperty es de sólo lectura.
Para participar correctamente en el manejo de dependencias, QObjectComputedProperty tiene que saber cuando su valor, el resultado del callback que se le ha dado, puede haber cambiado. Cuando una propiedad vinculable utilizada en la llamada de retorno cambia, esto ocurre automáticamente. Si el resultado de la llamada de retorno puede cambiar debido a un cambio en un valor que no es una propiedad vinculable, es responsabilidad del desarrollador llamar a notify en el objeto QObjectComputedProperty. Esto informará a las propiedades dependientes sobre el cambio potencial.
Ten en cuenta que llamar a notify puede activar gestores de cambio en propiedades dependientes, que a su vez pueden utilizar el objeto del que es miembro QObjectComputedProperty. Así que notify no debe ser llamado cuando se encuentre en un estado transitorio o inválido.
QObjectComputedProperty no es adecuado para su uso con un cálculo que depende de cualquier entrada que podría cambiar sin previo aviso, como el contenido de un archivo.
Ver también Q_OBJECT_COMPUTED_PROPERTY, QProperty, QObjectBindableProperty, Sistema de Propiedades de Qt, y Qt Bindable Properties.
Documentación de macros
[since 6.0] Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback)
Declara un QObjectComputedProperty dentro de containingClass de tipo type con nombre name. El argumento callback especifica una función GETTER que se llamará cuando se evalúe la propiedad.
Esta macro se introdujo en Qt 6.0.
Véase también QObjectBindableProperty, 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.