QObjectBindableProperty Class

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

Die Klasse QObjectBindableProperty ist eine Vorlagenklasse, die automatische Eigenschaftsbindungen für in QObject abgeleiteten Klassen gespeicherte Eigenschaftsdaten ermöglicht. Mehr...

Kopfzeile: #include <QObjectBindableProperty>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Seit: Qt 6.0
Erbt: QPropertyData

Öffentliche Funktionen

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

Makros

(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)

Ausführliche Beschreibung

QObjectBindableProperty ist ein generischer Container, der eine Instanz von T enthält und sich weitgehend wie QProperty verhält. Sie ist eine der Klassen, die Qt Bindable Properties implementieren. Im Gegensatz zu QProperty speichert sie ihre Verwaltungsdatenstruktur in der umgebenden QObject. Die zusätzlichen Template-Parameter werden verwendet, um die umgebende Klasse und eine Member-Funktion dieser Klasse zu identifizieren, die als Change-Handler fungiert.

Sie können QObjectBindableProperty verwenden, um Bindungsunterstützung zu Code hinzuzufügen, der Q_PROPERTY verwendet. Die Getter- und Setter-Methoden müssen sorgfältig nach den Regeln angepasst werden, die in Bindable Property Getters and Setters beschrieben sind.

Um das Änderungssignal bei Eigenschaftsänderungen aufzurufen, verwenden Sie QObjectBindableProperty und übergeben das Änderungssignal als Callback.

Ein einfaches Beispiel ist im Folgenden dargestellt.

#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); // enable debug logFoo myfoo;    QProperty<int> prop(42);    QObject::connect(&myfoo, &Foo::myValChanged, [&]() { if (debugout)            qDebug() << myfoo.myVal();
    }); myfoo.bindableMyVal().setBinding([&]() { return prop.value(); }); // druckt "42"prop = 5; // druckt "5"debugout = false; prop = 6; // druckt nichtsdebugout = true; prop = 7; // druckt "7"}#include "main.moc"

QObjectBindableProperty wird in der Regel nicht direkt verwendet, sondern eine Instanz davon wird mit Hilfe des Makros Q_OBJECT_BINDABLE_PROPERTY erzeugt.

Verwenden Sie das Q_OBJECT_BINDABLE_PROPERTY Makro in der Klassendeklaration, um die Eigenschaft als bindbar zu deklarieren.

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)
};

Wenn Sie die Eigenschaft direkt mit einem nicht standardmäßigen Wert initialisieren müssen, können Sie das Makro Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS verwenden. Es akzeptiert einen Wert für die Initialisierung als einen seiner Parameter.

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 unterstützt nicht direkt mehrere Argumente. Wenn Ihre Eigenschaft mehrere Argumente für die Initialisierung benötigt, rufen Sie bitte explizit den spezifischen Konstruktor auf.

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(MyClass, CustomType xProp, CustomType(5, 10),
                                     &MyClass::xChanged)

Der Change-Handler kann optional ein Argument akzeptieren, das vom gleichen Typ wie die Eigenschaft ist; in diesem Fall wird ihm der neue Wert der Eigenschaft übergeben. Andernfalls sollte er keine Argumente annehmen.

Wenn die Eigenschaft keine Änderungsbenachrichtigung benötigt, können Sie das "NOTIFY xChanged" im Makro Q_PROPERTY sowie das letzte Argument der Makros Q_OBJECT_BINDABLE_PROPERTY und Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS weglassen.

Siehe auch Q_OBJECT_BINDABLE_PROPERTY, Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS, QProperty, QObjectComputedProperty, Qt's Property System, und Qt Bindable Properties.

Dokumentation der Mitgliedsfunktionen

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

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

Weist dieser Eigenschaft newValue zu und entfernt die zugehörige Bindung der Eigenschaft, falls vorhanden. Wenn sich der Eigenschaftswert dadurch ändert, wird die Callback-Funktion auf owner aufgerufen.

QObjectBindableProperty::QObjectBindableProperty()

Konstruiert eine Eigenschaft mit einer standardmäßig konstruierten Instanz von T.

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

Konstruiert eine Eigenschaft, die an den angegebenen Bindungsausdruck f gebunden ist. Der Wert der Eigenschaft wird auf das Ergebnis der Auswertung der neuen Bindung gesetzt. Sobald sich eine Abhängigkeit der Bindung ändert, wird die Bindung neu ausgewertet und der Wert der Eigenschaft entsprechend aktualisiert.

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

Move-Konstruiert eine Eigenschaft mit der angegebenen initialValue.

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

Konstruiert eine Eigenschaft mit der angegebenen initialValue.

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

Konstruiert eine Eigenschaft, die an den angegebenen Ausdruck binding gebunden ist. Der Wert der Eigenschaft wird auf das Ergebnis der Auswertung der neuen Bindung gesetzt. Immer wenn sich eine Abhängigkeit der Bindung ändert, wird die Bindung neu ausgewertet und der Wert der Eigenschaft entsprechend aktualisiert.

Wenn sich der Eigenschaftswert ändert, wird owner über die Callback-Funktion benachrichtigt.

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

Konstruiert eine Eigenschaft, die an den angegebenen Ausdruck binding gebunden ist. Der Wert der Eigenschaft wird auf das Ergebnis der Auswertung der neuen Bindung gesetzt. Immer wenn sich eine Abhängigkeit der Bindung ändert, wird die Bindung neu ausgewertet und der Wert der Eigenschaft entsprechend aktualisiert.

Wenn sich der Eigenschaftswert ändert, wird owner über die Callback-Funktion benachrichtigt.

[default] QObjectBindableProperty::~QObjectBindableProperty()

Zerstört das Eigentum.

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

Abonniert den angegebenen Funktor f als Callback, der immer dann aufgerufen wird, wenn sich der Wert der Eigenschaft ändert.

Es wird erwartet, dass der Rückruf f ein Typ ist, der einen einfachen Aufrufoperator () ohne Parameter hat. Dies bedeutet, dass Sie einen C++-Lambda-Ausdruck, eine std::function oder sogar eine benutzerdefinierte Struktur mit einem Aufrufoperator bereitstellen können.

Das zurückgegebene Property Change Handler-Objekt verfolgt das Abonnement. Wenn es den Anwendungsbereich verlässt, wird der Callback abbestellt.

Diese Methode ist in einigen Fällen einfacher zu verwenden als onValueChanged(), da das zurückgegebene Objekt keine Vorlage ist. Es kann daher leichter gespeichert werden, z. B. als Mitglied in einer Klasse.

Siehe auch onValueChanged() und subscribe().

QPropertyBinding<T> QObjectBindableProperty::binding() const

Gibt den Bindungsausdruck zurück, der mit dieser Eigenschaft verknüpft ist. Ein standardmäßig konstruiertes QPropertyBinding<T> wird zurückgegeben, wenn keine solche Verknüpfung existiert.

Siehe auch setBinding().

bool QObjectBindableProperty::hasBinding() const

Gibt true zurück, wenn die Eigenschaft mit einer Bindung verbunden ist; andernfalls false.

void QObjectBindableProperty::notify()

Signalisiert programmatisch eine Änderung der Eigenschaft. Alle Bindungen, die davon abhängen, werden benachrichtigt, und wenn die Eigenschaft ein Signal hat, wird es ausgegeben.

Dies kann in Kombination mit setValueBypassingBindings nützlich sein, um die Signalisierung der Änderung aufzuschieben, bis eine Klasseninvariante wiederhergestellt wurde.

Hinweis: Wenn diese Eigenschaft eine Bindung hat (d.h. hasBinding() gibt true zurück), wird diese Bindung nicht neu ausgewertet, wenn notify() aufgerufen wird. Jede Bindung, die von dieser Eigenschaft abhängt, wird trotzdem wie üblich neu ausgewertet.

Siehe auch Qt::beginPropertyUpdateGroup() und setValueBypassingBindings().

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

Registriert den angegebenen Funktor f als Callback, der immer dann aufgerufen werden soll, wenn sich der Wert der Eigenschaft ändert. Bei jeder Wertänderung wird der Handler entweder sofort oder zeitversetzt aufgerufen, je nach Kontext.

Es wird erwartet, dass der Rückruf f ein Typ ist, der einen einfachen Aufrufoperator () ohne Parameter hat. Dies bedeutet, dass Sie einen C++-Lambda-Ausdruck, eine std::function oder sogar eine benutzerdefinierte Struktur mit einem Aufrufoperator angeben können.

Das zurückgegebene Property Change Handler-Objekt behält die Registrierung im Auge. Wenn es den Anwendungsbereich verlässt, wird die Registrierung des Rückrufs aufgehoben.

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

Verknüpft den Wert dieser Eigenschaft mit dem angegebenen Ausdruck newBinding und gibt die zuvor verknüpfte Bindung zurück. Der Wert der Eigenschaft wird auf das Ergebnis der Auswertung der neuen Bindung gesetzt. Wenn sich eine Abhängigkeit der Bindung ändert, wird die Bindung neu ausgewertet und der Wert der Eigenschaft entsprechend aktualisiert. Wenn sich der Eigenschaftswert ändert, wird der Besitzer über die Callback-Funktion benachrichtigt.

Siehe auch binding().

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

Dies ist eine überladene Funktion.

Verknüpft den Wert dieser Eigenschaft mit dem angegebenen Funktor f und gibt die zuvor verknüpfte Bindung zurück. Der Wert der Eigenschaft wird auf das Ergebnis der Auswertung der neuen Bindung gesetzt, indem der Aufrufoperator () von f aufgerufen wird. Immer wenn sich eine Abhängigkeit der Bindung ändert, wird die Bindung neu ausgewertet und der Wert der Eigenschaft wird entsprechend aktualisiert.

Wenn sich der Eigenschaftswert ändert, wird der Eigentümer über die Callback-Funktion benachrichtigt.

Siehe auch Formulierung einer Eigenschaftsbindung.

bool QObjectBindableProperty::setBinding(const QUntypedPropertyBinding &newBinding)

Dies ist eine überladene Funktion.

Verknüpft den Wert dieser Eigenschaft mit dem angegebenen newBinding Ausdruck. Der Wert der Eigenschaft wird auf das Ergebnis der Auswertung der neuen Bindung gesetzt. Immer wenn sich eine Abhängigkeit der Bindung ändert, wird die Bindung neu ausgewertet und der Wert der Eigenschaft entsprechend aktualisiert.

Gibt true zurück, wenn der Typ dieser Eigenschaft derselbe ist wie der Typ, den die Bindungsfunktion zurückgibt; andernfalls false.

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

Abonniert den angegebenen Funktor f als Callback, der sofort und immer dann aufgerufen wird, wenn sich der Wert der Eigenschaft in der Zukunft ändert. Bei jeder Wertänderung wird der Handler entweder sofort oder zeitversetzt aufgerufen, je nach Kontext.

Es wird erwartet, dass der Callback f ein Typ ist, der einen einfachen Aufrufoperator () ohne Parameter hat. Dies bedeutet, dass Sie einen C++-Lambda-Ausdruck, eine std::function oder sogar eine benutzerdefinierte Struktur mit einem Aufrufoperator angeben können.

Das zurückgegebene Property Change Handler-Objekt verfolgt das Abonnement. Wenn es den Anwendungsbereich verlässt, wird der Callback abbestellt.

QPropertyBinding<T> QObjectBindableProperty::takeBinding()

Entkoppelt den Bindungsausdruck von dieser Eigenschaft und gibt ihn zurück. Nach dem Aufruf dieser Funktion ändert sich der Wert der Eigenschaft nur, wenn Sie ihr einen neuen Wert zuweisen oder wenn eine neue Bindung festgelegt wird.

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

Gibt den Wert der Eigenschaft zurück. Dies kann einen Bindungsausdruck auswerten, der mit dieser Eigenschaft verknüpft ist, bevor der Wert zurückgegeben wird.

Siehe auch setValue().

Makro-Dokumentation

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

Deklariert ein QObjectBindableProperty innerhalb von containingClass vom Typ type mit dem Namen name. Wenn das optionale Argument signal angegeben wird, wird dieses Signal ausgegeben, wenn die Eigenschaft als dirty markiert wird.

Dieses Makro wurde in Qt 6.0 eingeführt.

Siehe auch Qt's Property System und Qt Bindable Properties.

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

Deklariert ein QObjectBindableProperty innerhalb von containingClass vom Typ type mit dem Namen name, der auf initialvalue initialisiert wird. Wenn das optionale Argument signal angegeben wird, wird dieses Signal ausgegeben, wenn die Eigenschaft als schmutzig markiert wird.

Dieses Makro wurde in Qt 6.0 eingeführt.

Siehe auch Qt's Property System und Qt Bindable Properties.

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