Sur cette page

QObjectBindableProperty Class

template <typename Class, typename T, auto Offset, auto Signal = nullptr> class QObjectBindableProperty

La classe QObjectBindableProperty est une classe modèle qui permet de lier automatiquement les propriétés stockées dans les classes dérivées de QObject. Plus d'informations...

En-tête : #include <QObjectBindableProperty>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Depuis : Qt 6.0
Hérite : QPropertyData

Cette classe est comparable à l'égalité.

Cette classe est comparable à T.

Fonctions publiques

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)

Description détaillée

QObjectBindableProperty est un conteneur générique qui contient une instance de T et se comporte essentiellement comme QProperty. C'est l'une des classes implémentant Qt Bindable Properties. Contrairement à QProperty, elle stocke sa structure de données de gestion dans le conteneur environnant QObject. Les paramètres supplémentaires du modèle sont utilisés pour identifier la classe environnante et une fonction membre de cette classe agissant comme un gestionnaire de changement.

Vous pouvez utiliser QObjectBindableProperty pour ajouter un support de liaison au code qui utilise Q_PROPERTY. Les méthodes getter et setter doivent être adaptées avec soin selon les règles décrites dans Bindable Property Getters and Setters.

Afin d'invoquer le signal de changement sur les changements de propriété, utilisez QObjectBindableProperty et transmettez le signal de changement en tant que rappel.

Un exemple simple est donné ci-dessous.

#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) ; // active le journal de débogageFoo 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; // n'imprime riendebugout = true; prop = 7; // imprime "7"}#include "main.moc"

QObjectBindableProperty n'est généralement pas utilisé directement, mais une instance est créée à l'aide de la macro Q_OBJECT_BINDABLE_PROPERTY.

Utilisez la macro Q_OBJECT_BINDABLE_PROPERTY dans la déclaration de la classe pour déclarer la propriété comme étant liante.

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 vous devez initialiser directement la propriété avec une valeur autre que celle par défaut, vous pouvez utiliser la macro Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS. Elle accepte une valeur pour l'initialisation comme l'un de ses paramètres.

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 ne prend pas en charge directement les arguments multiples. Si votre propriété nécessite plusieurs arguments pour l'initialisation, veuillez appeler explicitement le constructeur spécifique.

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)

Le gestionnaire de changement peut éventuellement accepter un argument, du même type que la propriété, auquel cas la nouvelle valeur de la propriété lui est transmise. Dans ce cas, la nouvelle valeur de la propriété lui est transmise. Sinon, il ne doit prendre aucun argument.

Si la propriété ne nécessite pas de notification de changement, vous pouvez omettre le "NOTIFY xChanged" dans la macro Q_PROPERTY ainsi que le dernier argument des macros Q_OBJECT_BINDABLE_PROPERTY et Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS.

Voir aussi Q_OBJECT_BINDABLE_PROPERTY, Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS, QProperty, QObjectComputedProperty, Qt's Property System, et Qt Bindable Properties.

Documentation sur les fonctions membres

QObjectBindableProperty::QObjectBindableProperty()

Construit une propriété avec une instance de T construite par défaut.

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

Construit une propriété liée à l'expression de liaison fournie f. La valeur de la propriété est fixée au résultat de l'évaluation de la nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, la liaison est réévaluée et la valeur de la propriété est mise à jour en conséquence.

[explicit] QObjectBindableProperty::QObjectBindableProperty(T &&initialValue)

Move-Construit une propriété avec l'adresse initialValue.

[explicit] QObjectBindableProperty::QObjectBindableProperty(const T &initialValue)

Construit une propriété avec l'adresse initialValue.

[default] QObjectBindableProperty::QObjectBindableProperty(Class *owner, QPropertyBinding<T> &&binding)

Construit une propriété liée à l'expression binding fournie. La valeur de la propriété est fixée au résultat de l'évaluation de la nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, la liaison est réévaluée et la valeur de la propriété est mise à jour en conséquence.

Lorsque la valeur de la propriété change, owner en est informé via la fonction Callback.

[default] QObjectBindableProperty::QObjectBindableProperty(Class *owner, const QPropertyBinding<T> &binding)

Construit une propriété liée à l'expression binding fournie. La valeur de la propriété est fixée au résultat de l'évaluation de la nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, la liaison est réévaluée et la valeur de la propriété est mise à jour en conséquence.

Lorsque la valeur de la propriété change, owner en est informé via la fonction Callback.

[default] QObjectBindableProperty::~QObjectBindableProperty()

Détruit la propriété.

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

Souscrit le foncteur donné f en tant que callback qui est appelé chaque fois que la valeur de la propriété change.

Le rappel f doit être un type qui possède un opérateur d'appel simple () sans aucun paramètre. Cela signifie que vous pouvez fournir une expression lambda C++, une std::function ou même une structure personnalisée avec un opérateur d'appel.

L'objet de gestion des changements de propriété renvoyé conserve la trace de l'abonnement. Lorsqu'il sort du champ d'application, le rappel est désabonné.

Cette méthode est dans certains cas plus facile à utiliser que onValueChanged(), car l'objet renvoyé n'est pas un modèle. Il peut donc être stocké plus facilement, par exemple en tant que membre d'une classe.

Voir aussi onValueChanged() et subscribe().

QPropertyBinding<T> QObjectBindableProperty::binding() const

Renvoie l'expression de liaison associée à cette propriété. Un QPropertyBinding<T> construit par défaut sera renvoyé si une telle association n'existe pas.

Voir également setBinding().

bool QObjectBindableProperty::hasBinding() const

Retourne true si la propriété est associée à une liaison, false dans le cas contraire.

void QObjectBindableProperty::notify()

Signale de manière programmatique une modification de la propriété. Toutes les liaisons qui en dépendent seront notifiées et, si la propriété possède un signal, celui-ci sera émis.

Cela peut être utile en combinaison avec setValueBypassingBindings pour différer la signalisation du changement jusqu'à ce qu'un invariant de classe ait été restauré.

Remarque : si cette propriété a une liaison (c'est-à-dire que hasBinding() renvoie true), cette liaison n'est pas réévaluée lorsque notify() est appelé. Toute liaison dépendant de cette propriété est réévaluée comme d'habitude.

Voir aussi Qt::beginPropertyUpdateGroup() et setValueBypassingBindings().

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

Enregistre le foncteur donné f en tant que rappel qui doit être appelé chaque fois que la valeur de la propriété change. À chaque changement de valeur, le gestionnaire est appelé immédiatement ou de manière différée, en fonction du contexte.

Le callback f est censé être un type qui possède un opérateur d'appel simple () sans aucun paramètre. Cela signifie que vous pouvez fournir une expression lambda C++, une std::function ou même une structure personnalisée avec un opérateur d'appel.

L'objet de gestion des changements de propriété renvoyé conserve la trace de l'enregistrement. Lorsqu'il sort du champ d'application, le rappel est désenregistré.

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

Associe la valeur de cette propriété à l'expression newBinding fournie et renvoie la liaison précédemment associée. La valeur de la propriété est fixée au résultat de l'évaluation de la nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, la liaison est réévaluée et la valeur de la propriété est mise à jour en conséquence. Lorsque la valeur de la propriété change, le propriétaire en est informé via la fonction Callback.

Voir aussi binding().

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

Associe la valeur de cette propriété au foncteur fourni f et renvoie la liaison précédemment associée. La valeur de la propriété est fixée au résultat de l'évaluation de la nouvelle liaison en invoquant l'opérateur d'appel () de f. Chaque fois qu'une dépendance de la liaison change, la liaison est réévaluée et la valeur de la propriété est mise à jour en conséquence.

Lorsque la valeur de la propriété change, le propriétaire en est informé par l'intermédiaire de la fonction Callback.

Il s'agit d'une fonction surchargée.

Voir aussi Formulation d'une liaison de propriété.

bool QObjectBindableProperty::setBinding(const QUntypedPropertyBinding &newBinding)

Associe la valeur de cette propriété à l'expression newBinding fournie. La valeur de la propriété est fixée au résultat de l'évaluation de la nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, la liaison est réévaluée et la valeur de la propriété est mise à jour en conséquence.

Retourne true si le type de cette propriété est le même que le type retourné par la fonction de liaison ; false sinon.

Il s'agit d'une fonction surchargée.

void QObjectBindableProperty::setValue(QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type newValue)

void QObjectBindableProperty::setValue(QObjectBindableProperty<Class, T, Offset, Signal>::rvalue_ref newValue)

Affecte newValue à cette propriété et supprime la liaison associée à la propriété, le cas échéant. Si la valeur de la propriété change en conséquence, la fonction Callback est appelée sur owner.

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

Souscrit au foncteur donné f en tant que rappel qui est appelé immédiatement et à chaque fois que la valeur de la propriété change dans le futur. À chaque changement de valeur, le gestionnaire est appelé immédiatement ou de manière différée, en fonction du contexte.

Le callback f est censé être un type qui possède un opérateur d'appel simple () sans aucun paramètre. Cela signifie que vous pouvez fournir une expression lambda C++, une std::function ou même une structure personnalisée avec un opérateur d'appel.

L'objet de gestion des changements de propriété renvoyé conserve la trace de l'abonnement. Lorsqu'il sort du champ d'application, le rappel est désabonné.

QPropertyBinding<T> QObjectBindableProperty::takeBinding()

Dissocie l'expression de liaison de cette propriété et la renvoie. Après l'appel de cette fonction, la valeur de la propriété ne changera que si vous lui attribuez une nouvelle valeur ou si une nouvelle liaison est définie.

QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type QObjectBindableProperty::value() const

Renvoie la valeur de la propriété. Cette fonction peut évaluer une expression de liaison liée à cette propriété avant de renvoyer la valeur.

Voir également setValue().

Documentation sur les macros

[since 6.0] Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal)

Déclare un QObjectBindableProperty à l'intérieur de containingClass de type type avec le nom name. Si l'argument optionnel signal est donné, ce signal sera émis lorsque la propriété sera marquée comme sale.

Cette macro a été introduite dans Qt 6.0.

Voir aussi Qt 's Property System et Qt Bindable Properties.

[since 6.0] Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal)

Déclare un QObjectBindableProperty à l'intérieur de containingClass de type type avec le nom name qui est initialisé à initialvalue. Si l'argument optionnel signal est donné, ce signal sera émis lorsque la propriété est marquée comme sale.

Cette macro a été introduite dans Qt 6.0.

Voir aussi Qt 's Property System et Qt Bindable Properties.

© 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.