QBindable Class
template <typename T> class QBindableQBindable 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_PROPERTY
s 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.
© 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.