QObjectComputedProperty Class
template <typename Class, typename T, auto Offset, auto Getter> class QObjectComputedPropertyLa classe QObjectComputedProperty est une classe modèle qui permet de porter d'anciennes propriétés vers le système de propriétés liables. Plus d'informations...
| En-tête : | #include <QObjectComputedProperty> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Depuis : | Qt 6.0 |
| Hérite : | QUntypedPropertyData |
Macros
(since 6.0) | Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback) |
Description détaillée
QObjectComputedProperty est une propriété en lecture seule qui est recalculée à chaque lecture. Elle ne stocke pas la valeur calculée. C'est l'une des classes internes de Qt qui implémentent les propriétés liées de Qt. QObjectComputedProperty n'est généralement pas utilisée directement, mais une instance est créée à l'aide de la macro Q_OBJECT_COMPUTED_PROPERTY.
Voir l'exemple suivant.
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) };
Les règles applicables aux getters dans Bindable Property Getters and Setters s'appliquent également à QObjectComputedProperty. En particulier, le getter doit être trivial et ne renvoyer que la valeur de l'objet QObjectComputedProperty. Le rappel donné à QObjectComputedProperty doit généralement être une méthode privée qui n'est appelée que par QObjectComputedProperty.
Aucun setter n'est requis ou autorisé, car QObjectComputedProperty est en lecture seule.
Pour participer correctement à la gestion des dépendances, QObjectComputedProperty doit savoir quand sa valeur, le résultat du rappel qui lui est donné, peut avoir changé. Chaque fois qu'une propriété liante utilisée dans le rappel change, cela se produit automatiquement. Si le résultat du rappel risque de changer en raison d'une modification d'une valeur qui n'est pas une propriété liante, il incombe au développeur d'appeler notify sur l'objet QObjectComputedProperty. Les propriétés dépendantes seront ainsi informées de la modification potentielle.
Notez que l'appel à notify peut déclencher des gestionnaires de changement dans les propriétés dépendantes, qui peuvent à leur tour utiliser l'objet dont la QObjectComputedProperty est membre. C'est pourquoi notify ne doit pas être appelé dans un état transitoire ou invalide.
QObjectComputedProperty ne convient pas à une utilisation avec un calcul qui dépend d'une entrée susceptible de changer sans préavis, comme le contenu d'un fichier.
Voir également Q_OBJECT_COMPUTED_PROPERTY, QProperty, QObjectBindableProperty, le système de propriétés de Qt et les propriétés liées de Qt.
Documentation sur les macros
[since 6.0] Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback)
Déclare un QObjectComputedProperty à l'intérieur de containingClass de type type avec le nom name. L'argument callback spécifie une fonction GETTER à appeler lorsque la propriété est évaluée.
Cette macro a été introduite dans Qt 6.0.
Voir aussi QObjectBindableProperty, le système de propriétés de Qt et les propriétés liées 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.