QBindable Class

template <typename T> class QBindable

QBindable ist eine Wrapper-Klasse für bindungsfähige Eigenschaften. Sie ermöglicht typsichere Operationen und abstrahiert dabei die Unterschiede zwischen den verschiedenen Eigenschaftsklassen weg. Mehr...

Kopfzeile: #include <QBindable>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Erbt: QUntypedBindable

Öffentliche Funktionen

QBindable(QObject *obj, const QMetaProperty &property)
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

Detaillierte Beschreibung

QBindable<T> hilft bei der Integration von Qt's traditioneller Q_PROPERTY mit bindable-enabled properties. Wenn eine Eigenschaft durch eine QProperty, QObjectBindableProperty oder QObjectComputedProperty unterstützt wird, können Sie BINDABLE bindablePropertyName zur Q_PROPERTY Deklaration hinzufügen, wobei bindablePropertyName eine Funktion ist, die eine Instanz von QBindable zurückgibt, die aus der QProperty konstruiert wurde. Das zurückgegebene QBindable ermöglicht es Benutzern der Eigenschaft, Bindungen der Eigenschaft zu setzen und abzufragen, ohne die genaue Art der verwendeten bindungsfähigen Eigenschaft kennen zu müssen.

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: // Deklariere die Instanz der bindbaren Eigenschaftsdaten.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 84

Siehe auch QMetaProperty::isBindable, QProperty, QObjectBindableProperty, QObjectComputedProperty, und Qt Bindable Properties.

Dokumentation der Mitgliedsfunktionen

[explicit] QBindable::QBindable(QObject *obj, const QMetaProperty &property)

Siehe QBindable::QBindable(QObject *obj, const char *property)

[explicit] QBindable::QBindable(QObject *obj, const char *property)

Konstruiert ein QBindable für die Q_PROPERTY property auf obj. Die Eigenschaft muss ein Benachrichtigungssignal haben, muss aber nicht BINDABLE in seiner Q_PROPERTY Definition haben, so dass auch bindungsunbewusste Q_PROPERTYs gebunden oder in Bindungsausdrücken verwendet werden können. Sie müssen QBindable::value() in Bindungsausdrücken anstelle der normalen Eigenschaft READ Funktion (oder MEMBER) verwenden, um die Abhängigkeitsverfolgung zu aktivieren, wenn die Eigenschaft nicht BINDABLE ist. Beim Binden mit einem Lambda können Sie es vorziehen, das QBindable durch einen Wert zu erfassen, um die Kosten für den Aufruf dieses Konstruktors im Bindungsausdruck zu vermeiden. Dieser Konstruktor sollte nicht verwendet werden, um BINDABLE für eine Q_PROPERTY zu implementieren, da die resultierende Q_PROPERTY keine Abhängigkeitsverfolgung unterstützt. Um eine Eigenschaft zu erstellen, die direkt verwendbar ist, ohne ein QBindable zu lesen, verwenden Sie QProperty oder QObjectBindableProperty.

QProperty<QString> displayText;
QDateTimeEdit *dateTimeEdit = findDateTimeEdit();
QBindable<QDateTime> dateTimeBindable(dateTimeEdit, "dateTime");
displayText.setBinding([dateTimeBindable](){ return dateTimeBindable.value().toString(); });

Siehe auch QProperty, QObjectBindableProperty, und Qt Bindable Properties.

QPropertyBinding<T> QBindable::binding() const

Gibt die aktuell eingestellte Bindung der zugrunde liegenden Eigenschaft zurück. Wenn die Eigenschaft keine Bindung hat, ist die zurückgegebene QPropertyBinding<T> ungültig.

Siehe auch setBinding und hasBinding.

QPropertyBinding<T> QBindable::makeBinding(const QPropertyBindingSourceLocation &location = QT_PROPERTY_DEFAULT_BINDING_LOCATION) const

Konstruiert eine Bindung, die den Wert der zugrunde liegenden Eigenschaft auswertet, unter Verwendung einer angegebenen Quelle location.

QPropertyBinding<T> QBindable::setBinding(const QPropertyBinding<T> &binding)

Setzt die Bindung der zugrunde liegenden Eigenschaft auf binding. Führt nichts aus, wenn die QBindable schreibgeschützt oder ungültig ist.

Siehe auch binding, isReadOnly(), und isValid().

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

Dies ist eine überladene Funktion.

Erzeugt eine QPropertyBinding<T> aus f und legt sie als Bindung für die zugrunde liegende Eigenschaft fest.

void QBindable::setValue(const T &value)

Setzt den Wert der zugrundeliegenden Eigenschaft auf value. Dadurch wird jede aktuell gesetzte Bindung aufgehoben. Diese Funktion hat keine Auswirkung, wenn die QBindable schreibgeschützt oder ungültig ist.

Siehe auch value(), isValid(), isReadOnly(), und setBinding().

QPropertyBinding<T> QBindable::takeBinding()

Entfernt die aktuell eingestellte Bindung der zugrunde liegenden Eigenschaft und gibt sie zurück. Wenn die Eigenschaft keine Bindung hat, ist die zurückgegebene QPropertyBinding<T> ungültig.

Siehe auch binding, setBinding, und hasBinding.

T QBindable::value() const

Gibt den aktuellen Wert der zugrunde liegenden Eigenschaft zurück. Wenn QBindable ungültig ist, wird ein konstruierter Standardwert T zurückgegeben.

Siehe auch setValue() und isValid().

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