QBindable Class
template <typename T> class QBindableQBindable est une classe d'encapsulation autour des propriétés prises en charge par la liaison. Elle permet d'effectuer des opérations sans risque de type tout en masquant les différences entre les diverses classes de propriétés. En savoir plus...
| En-tête : | #include <QBindable> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Hérite de : | QUntypedBindable |
Fonctions publiques
(since 6.5) | QBindable(QObject *obj, const QMetaProperty &property) |
(since 6.5) | QBindable(QObject *obj, const char *property) |
| QPropertyBinding<T> | binding() const |
| QPropertyBinding<T> | makeBinding(const QPropertyBindingSourceLocation &location = QT_PROPERTY_DEFAULT_BINDING_LOCATION) const |
| QPropertyBinding<T> | setBinding(const QPropertyBinding<T> &binding) |
| QPropertyBinding<T> | setBinding(Functor f) |
| void | setValue(const T &value) |
| QPropertyBinding<T> | takeBinding() |
| T | value() const |
Description détaillée
QBindable est une classe de modèle dans laquelle le paramètre de modèle T spécifie le type de la valeur de la propriété.
QBindable<T> permet d'intégrer l'Q_PROPERTY traditionnelle de Qt aux propriétés prenant en charge le binding. Si une propriété est implémentée par une classe de type ` QProperty`, ` QObjectBindableProperty ` ou ` QObjectComputedProperty`, vous pouvez ajouter ` BINDABLE bindablePropertyName` à la déclaration ` Q_PROPERTY `, où `bindablePropertyName` est une fonction renvoyant une instance de `QBindable` construite à partir de ` QProperty`. L'instance de `QBindable` renvoyée permet aux utilisateurs de la propriété de définir et d'interroger les liaisons de la propriété, sans avoir à connaître le type exact de la propriété compatible avec les liaisons utilisé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:
// Déclaration de l’instance des données de la propriété liable.
Q_OBJECT_BINDABLE_PROPERTY(MyClass, int, xProp, &MyClass::xChanged)
};
MyClass *myObject;
QBindable<int> bindableX = myObject->bindableX();
qDebug() << bindableX.hasBinding(); // prints false
QProperty<int> y {42};
bindableX.setBinding([&](){ return 2*y.value(); });
qDebug() << bindableX.hasBinding() << myObject->x(); // prints true 84Voir également QMetaProperty::isBindable, QProperty, QObjectBindableProperty, QObjectComputedProperty et « Propriétés liables Qt ».
Documentation sur les fonctions membres
[explicit, since 6.5] QBindable::QBindable(QObject *obj, const QMetaProperty &property)
Voir QBindable::QBindable(QObject *obj, const char *property)
Cette fonction a été introduite dans Qt 6.5.
[explicit, since 6.5] QBindable::QBindable(QObject *obj, const char *property)
Construit un objet `QBindable` pour l’ Q_PROPERTY property sur obj. La propriété doit disposer d’un signal `notify`, mais n’a pas besoin d’inclure ` BINDABLE ` dans sa définition ` Q_PROPERTY ` ; ainsi, même les objets ` Q_PROPERTY` qui ne prennent pas en charge le liaison peuvent être liés ou utilisés dans des expressions de liaison. Vous devez utiliser ` QBindable::value() ` dans les expressions de liaison à la place de la fonction ` READ ` (ou ` MEMBER`) de la propriété standard afin d’activer le suivi des dépendances si la propriété n’est pas de type ` BINDABLE`. Lors d’un liaison à l’aide d’un lambda, vous pouvez préférer capturer le `QBindable` par valeur afin d’éviter le coût lié à l’appel de ce constructeur dans l’expression de liaison. Ce constructeur ne doit pas être utilisé pour implémenter ` BINDABLE ` pour un ` Q_PROPERTY`, car le ` Q_PROPERTY ` résultant ne prendra pas en charge le suivi des dépendances. Pour créer une propriété utilisable directement sans passer par un `QBindable`, utilisez ` QProperty ` ou ` QObjectBindableProperty`.
QProperty<QString> displayText;
QDateTimeEdit *dateTimeEdit = findDateTimeEdit();
QBindable<QDateTime> dateTimeBindable(dateTimeEdit, "dateTime");
displayText.setBinding([dateTimeBindable](){ return dateTimeBindable.value().toString(); });Cette fonctionnalité a été introduite dans Qt 6.5.
Voir également QProperty, QObjectBindableProperty et Propriétés Qt Bindable.
QPropertyBinding<T> QBindable::binding() const
Renvoie la liaison actuellement définie pour la propriété sous-jacente. Si la propriété ne dispose pas de liaison, l'QPropertyBinding<T> e renvoyée sera invalide.
Voir également setBinding et hasBinding.
QPropertyBinding<T> QBindable::makeBinding(const QPropertyBindingSourceLocation &location = QT_PROPERTY_DEFAULT_BINDING_LOCATION) const
Crée un lien dont la valeur correspond à celle de la propriété sous-jacente, en utilisant une source spécifiée location.
QPropertyBinding<T> QBindable::setBinding(const QPropertyBinding<T> &binding)
Définit la liaison de la propriété sous-jacente sur binding. Ne produit aucun effet si l'QBindable est en lecture seule ou non valide.
Voir également binding, isReadOnly() et isValid().
template <typename Functor> QPropertyBinding<T> QBindable::setBinding(Functor f)
Crée un objet ` QPropertyBinding<T> ` à partir de ` f` et le définit comme liaison de la propriété sous-jacente.
Il s'agit d'une fonction surchargée.
void QBindable::setValue(const T &value)
Définit la valeur de la propriété sous-jacente sur value. Cela supprime toute liaison actuellement définie sur cette propriété. Cette fonction n'a aucun effet si l'QBindable est en lecture seule ou non valide.
Voir également value(), isValid(), isReadOnly() et setBinding().
QPropertyBinding<T> QBindable::takeBinding()
Supprime le lien actuellement défini pour la propriété sous-jacente et renvoie celle-ci. Si la propriété ne dispose pas de lien, l'QPropertyBinding<T> e renvoyée ne sera pas valide.
Voir également binding, setBinding et hasBinding.
T QBindable::value() const
Renvoie la valeur actuelle de la propriété sous-jacente. Si l'QBindable e n'est pas valide, un objet T créé par défaut est renvoyé.
© 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.