QObjectBindableProperty Class
template <typename Class, typename T, auto Offset, auto Signal> class QObjectBindablePropertyLa classe ` QObject ` est une classe modèle qui permet la liaison automatique des propriétés pour les données de propriétés stockées dans les classes dérivées de ` `. En savoir plus...
| 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 de : | QPropertyData |
Comparaisons entre les propriétés liables de QObject
| Catégorie | Types comparables |
|---|---|
| égalité | QObjectBindableProperty |
| égalité | 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 une classe de modèle dans laquelle le paramètre de modèle Class spécifie la classe dérivée d'QObject, T spécifie le type de la valeur de la propriété, Offset spécifie l'emplacement de la propriété au sein de la classe, et Signal spécifie, de manière facultative, le signal de notification à émettre lorsque la valeur de la propriété change.
`QObjectBindableProperty` est un conteneur générique qui contient une instance de `T` et se comporte en grande partie comme ` QProperty`. C’est l’une des classes implémentant les propriétés liables de Qt. Contrairement à ` QProperty`, elle stocke sa structure de données de gestion dans la classe environnante ` QObject`. Les paramètres de modèle supplémentaires sont utilisés pour identifier la classe environnante et une fonction membre de cette classe agissant comme gestionnaire de changement.
Vous pouvez utiliser `QObjectBindableProperty` pour ajouter la prise en charge des liaisons au code qui utilise ` Q_PROPERTY`. Les méthodes getter et setter doivent être adaptées avec soin, conformément aux règles décrites dans la section « Getters et setters des propriétés liables ».
Pour déclencher le signal de modification lors des changements de propriété, utilisez QObjectBindableProperty et transmettez le signal de modification en tant que rappel.
Un exemple simple est présenté 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ébogage
Foo myfoo;
QProperty<int> prop(42);
QObject::connect(&myfoo, &Foo::myValChanged, [&]() {
if (debugout)
qDebug() << myfoo.myVal();
});
myfoo.bindableMyVal().setBinding([&]() { return prop.value(); }); // affiche « 42 »
prop = 5; // affiche « 5 »
debugout = false;
prop = 6; // n'affiche rien
debugout = true;
prop = 7; // affiche « 7 »
}
#include "main.moc"QObjectBindableProperty n'est généralement pas utilisé directement ; on crée plutôt une instance de cette classe à 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 pouvant être liée.
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 la valeur par défaut, vous pouvez utiliser la macro ` Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS `. Elle accepte une valeur d'initialisation parmi 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 directement en charge les arguments multiples. Si votre propriété nécessite plusieurs arguments pour son initialisation, veuillez appeler explicitement le constructeur correspondant.
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 modification peut, s'il le souhaite, accepter un argument, du même type que la propriété, auquel cas on lui transmet la nouvelle valeur de la propriété. Sinon, il ne doit prendre aucun argument.
Si la propriété ne nécessite pas de notification de modification, vous pouvez omettre « 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 également Q_OBJECT_BINDABLE_PROPERTY, Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS, QProperty, QObjectComputedProperty, le système de propriétés de Qt et les propriétés liables de Qt.
Documentation sur les fonctions membres
[default] QObjectBindableProperty::QObjectBindableProperty()
Crée une propriété avec une instance de type T construite par défaut.
[explicit] template <typename Functor> QObjectBindableProperty::QObjectBindableProperty(Functor &&f)
Crée une propriété liée à l'expression de liaison fournie : f. La valeur de la propriété est définie sur le résultat de l'évaluation de cette nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, celle-ci est réévaluée et la valeur de la propriété est mise à jour en conséquence.
[explicit] QObjectBindableProperty::QObjectBindableProperty(T &&initialValue)
Move : crée une propriété à partir de l'initialValue.
[explicit] QObjectBindableProperty::QObjectBindableProperty(const T &initialValue)
Crée une propriété à partir de l'initialValue fournie.
[implicit] QObjectBindableProperty::QObjectBindableProperty(Class *owner, QPropertyBinding<T> &&binding)
Crée une propriété liée à l'expression « binding » fournie. La valeur de la propriété est définie sur le résultat de l'évaluation de la nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, celle-ci 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 de rappel.
[implicit] QObjectBindableProperty::QObjectBindableProperty(Class *owner, const QPropertyBinding<T> &binding)
Crée une propriété liée à l'expression « binding » fournie. La valeur de la propriété est définie sur le résultat de l'évaluation de la nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, celle-ci 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 est notifié via la fonction de rappel.
[implicit] QObjectBindableProperty::~QObjectBindableProperty()
Détruit le bien.
template <typename Functor> QPropertyNotifier QObjectBindableProperty::addNotifier(Functor f)
Enregistre le foncteur spécifié f en tant que fonction de rappel appelée chaque fois que la valeur de la propriété change.
La fonction de rappel f doit être d'un type disposant d'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 dotée d'un opérateur d'appel.
L’objet gestionnaire de changement de propriété renvoyé assure le suivi de l’abonnement. Lorsqu’il sort de la portée, la fonction de rappel est désabonnée.
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 également ` onValueChanged()` et ` subscribe()`.
QPropertyBinding<T> QObjectBindableProperty::binding() const
Renvoie l'expression de liaison associée à cette propriété. Si aucune association de ce type n'existe, un objet QPropertyBinding<T> instancié par défaut sera renvoyé.
Voir également setBinding().
bool QObjectBindableProperty::hasBinding() const
Renvoie « 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 en seront informées, et si la propriété dispose d’un signal, celui-ci sera émis.
Cela peut s’avérer utile en combinaison avec `setValueBypassingBindings` pour différer la notification de la modification jusqu’à ce qu’une invariante de classe ait été rétablie.
Remarque : si cette propriété possède une liaison (c'est-à-dire si la méthode ` hasBinding()` renvoie `true`), cette liaison n'est pas réévaluée lorsque la méthode `notify()` est appelée. Toute liaison dépendant de cette propriété est toutefois réévaluée comme d'habitude.
Voir également ` Qt::beginPropertyUpdateGroup()` et ` setValueBypassingBindings()`.
template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::onValueChanged(Functor f)
Enregistre le foncteur donné f en tant que fonction de rappel qui sera appelée chaque fois que la valeur de la propriété changera. À chaque changement de valeur, la fonction de rappel est soit appelée immédiatement, soit différée, selon le contexte.
La fonction de rappel f doit être d’un type doté d’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 dotée d’un opérateur d’appel.
L’objet gestionnaire de modification de propriété renvoyé assure le suivi de l’enregistrement. Lorsqu’il sort de la portée, le callback est désenregistré.
QPropertyBinding<T> QObjectBindableProperty::setBinding(const QPropertyBinding<T> &newBinding)
Associe la valeur de cette propriété à l'expression fournie newBinding et renvoie la liaison précédemment associée. La valeur de la propriété est définie sur le résultat de l'évaluation de la nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, celle-ci 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 de rappel.
Voir également 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 définie sur le résultat de l'évaluation de la nouvelle liaison, obtenue en appelant l'opérateur d'appel () de f. Chaque fois qu'une dépendance de la liaison change, celle-ci 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 de rappel.
Il s’agit d’une fonction surchargée.
Voir également «Formulation d’un lien de propriété ».
bool QObjectBindableProperty::setBinding(const QUntypedPropertyBinding &newBinding)
Associe la valeur de cette propriété à l'expression fournie newBinding. La valeur de la propriété est définie sur le résultat de l'évaluation de la nouvelle liaison. Chaque fois qu'une dépendance de la liaison change, celle-ci est réévaluée et la valeur de la propriété est mise à jour en conséquence.
Renvoie ` true ` si le type de cette propriété est identique à celui renvoyé par la fonction de liaison ; ` false ` dans le cas contraire.
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)
Attribue la valeur « newValue » à cette propriété et supprime la liaison associée à celle-ci, le cas échéant. Si la valeur de la propriété change à la suite de cette opération, la fonction de rappel est appelée sur owner.
template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::subscribe(Functor f)
Enregistre le foncteur donné f en tant que callback qui est appelé immédiatement et à chaque fois que la valeur de la propriété change par la suite. À chaque changement de valeur, le gestionnaire est soit appelé immédiatement, soit différé, selon le contexte.
La fonction de rappel f doit être d’un type disposant d’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 dotée d’un opérateur d’appel.
L’objet de gestionnaire de modification de propriété renvoyé assure le suivi de l’abonnement. Lorsqu’il sort de la portée, le rappel est désabonné.
QPropertyBinding<T> QObjectBindableProperty::takeBinding()
Dissocie l'expression de liaison de cette propriété et la renvoie. Après avoir appelé 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é. Avant de renvoyer cette valeur, le système peut évaluer une expression de liaison associée à cette propriété.
Voir aussi setValue().
Documentation sur les macros
[since 6.0] Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal)
Déclare une « QObjectBindableProperty » à l'intérieur de « containingClass » de type « type » et portant le nom « name ». Si l'argument facultatif « signal » est fourni, ce signal sera émis lorsque la propriété sera marquée comme modifiée.
Cette macro a été introduite dans Qt 6.0.
Voir également le système de propriétés de Qt et les propriétés liables de Qt.
[since 6.0] Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal)
Déclare une instance de ` QObjectBindableProperty ` à l'intérieur de ` containingClass `, de type ` type ` et portant le nom ` name `, initialisée à ` initialvalue`. Si l'argument facultatif ` signal ` est fourni, ce signal sera émis lorsque la propriété sera marquée comme modifiée.
Cette macro a été introduite dans Qt 6.0.
Voir également le système de propriétés de Qt et les propriétés liables 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.