Auf dieser Seite

Binding QML Type

Ermöglicht die beliebige Erstellung von Eigenschaftsbindungen. Mehr...

Import Statement: import QtQml

Eigenschaften

Ausführliche Beschreibung

In QML führen Eigenschaftsbindungen zu einer Abhängigkeit zwischen den Eigenschaften verschiedener Objekte.

Bindung an eine nicht zugängliche Eigenschaft

Manchmal ist es notwendig, die Eigenschaft eines Objekts an die eines anderen Objekts zu binden, das nicht direkt von QML instanziiert wird, wie beispielsweise eine Eigenschaft einer Klasse, die von C++ nach QML exportiert wird. Sie können den Typ „Binding“ verwenden, um diese Abhängigkeit herzustellen und beliebige Werte an beliebige Objekteigenschaften zu binden.

In einer C++-Anwendung, die beispielsweise die Eigenschaft „app.enteredText“ in QML abbildet, können Sie „Binding“ verwenden, um die Eigenschaft „enteredText“ zu aktualisieren.

TextEdit { id: myTextField; text: "Please type here..." }
Binding { app.enteredText: myTextField.text }

Wenn sich „ text “ ändert, wird die C++-Eigenschaft „ enteredText “ automatisch aktualisiert.

Bedingte Bindungen

In manchen Fällen möchtest du den Wert einer Eigenschaft ändern, wenn eine bestimmte Bedingung erfüllt ist, ihn andernfalls aber unverändert lassen. Oft ist dies mit direkten Bindungen nicht möglich, da du Werte für alle möglichen Verzweigungen angeben musst.

Das folgende Code-Snippet führt beispielsweise jedes Mal zu einer Warnung, wenn Sie die Maustaste loslassen. Dies liegt daran, dass der Wert der Bindung undefiniert ist, wenn die Maustaste nicht gedrückt ist.

// produces warning: "Unable to assign [undefined] to double value"
targetProperty: if (mouse.pressed) mouse.mouseX

Der Typ „Binding“ kann diese Warnung verhindern.

Binding on targetProperty {
    when: mouse.pressed
    value: mouse.mouseX
}

Der Typ „Binding“ stellt alle zuvor festgelegten direkten Bindungen für die Eigenschaft wieder her.

Die Bindung an die Eigenschaft „ value “ von „ Binding “ wird jedoch weiterhin bedingungslos ausgewertet, selbst wenn „ when “ den Wert „ false “ hat.

Dies kann zu Warnungen führen, wenn die Bindung beispielsweise dazu dient, zu verhindern, dass ein Wert „ null “ ist:

Binding on targetProperty {
    when: root.object !== null
    //  produces warning: "TypeError: Cannot read property 'someProperty' of null"
    value: root.object.someProperty
}

Es gibt zwei Möglichkeiten, dieses Problem zu vermeiden:

  • Wenn das Ziel über einen „ id “ verfügt, können Sie die unter Multiple targets in one Binding beschriebene Syntax verwenden, wodurch der Binding-Ausdruck ebenfalls nur ausgeführt wird, wenn „ Binding “ aktiviert ist:
    Binding {
        when: root.object !== null
        root.targetProperty: root.object.someProperty
    }
  • Sie können die Überprüfung in der Bindung wiederholen und vorzeitig zurückkehren:
    Binding on targetProperty {
        when: root.object !== null
        value: {
            if (root.object === null)
                return
            return root.object.someProperty
        }
    }

Mehrere Ziele in einem Binding

Sie können in einem Binding-Element mehrere Bindungen zu demselben Objekt angeben:

Text {
    id: t1
}

Binding {
    t1 {
        color: "#00FF00"
        text: "green text"
    }
}

Sie können in einem einzelnen „Binding“-Element auch mehrere Bindungen mit unterschiedlichen Zielobjekten angeben:

Text {
    id: t1
}

Text {
    id: t2
}

Binding {
    t1.text: "Foo"
    t2.text: "Bar"
}

Siehe auch Qt Qml.

Dokumentation zu Eigenschaften

delayed : bool

Diese Eigenschaft legt fest, ob die Bindung verzögert werden soll.

Bei einer verzögerten Bindung wird das Ziel nicht sofort aktualisiert, sondern es wird gewartet, bis die Ereigniswarteschlange geleert wurde. Dies kann zur Optimierung genutzt werden oder um zu verhindern, dass Zwischenwerte zugewiesen werden.

Binding {
    contactName.text.value: givenName + " " + familyName
    when: list.ListView.isCurrentItem
    delayed: true
}

Hinweis: Die Verwendung der Eigenschaft „delayed“ verursacht Laufzeitaufwand, da das Binding-Element einen Proxy für den Wert erstellen muss, um dessen Anwendung auf das eigentliche Ziel verzögern zu können. Bei Verwendung der Eigenschaften „ target “ und „ property “ ist dieser Aufwand geringer, da die Eigenschaft „ value “ als Proxy wiederverwendet werden kann. Bei Verwendung der oben gezeigten Form legt „Binding“ ein separates Objekt mit einem dynamischen Metaobjekt an, um die Proxy-Werte zu speichern.

property : string

Die zu aktualisierende Eigenschaft.

Dies kann eine Gruppeneigenschaft sein, wenn der Ausdruck zum Zugriff auf eine Eigenschaft eines Werttyps führt. Beispiel:

Item {
    id: item

    property rect rectangle: Qt.rect(0, 0, 200, 200)
}

Binding {
    target: item
    property: "rectangle.x"
    value: 100
}

Sie müssen diese Eigenschaft nur verwenden, wenn Sie das Bindungsziel nicht deklarativ angeben können. Der folgende Codeausschnitt entspricht der obigen Bindung, ist jedoch kompakter:

Binding { item.rectangle.x: 100 }

restoreMode : enumeration

Mit dieser Eigenschaft lässt sich festlegen, ob und wie der ursprüngliche Wert wiederhergestellt werden soll, wenn die Bindung deaktiviert wird.

Die möglichen Werte sind:

ConstantBeschreibung
Binding.RestoreNoneDer ursprüngliche Wert wird überhaupt nicht wiederhergestellt
Binding.RestoreBindingDer ursprüngliche Wert wird wiederhergestellt, wenn es sich um eine andere Bindung handelte. In diesem Fall ist die alte Bindung wieder wirksam.
Binding.RestoreValueDer ursprüngliche Wert wird wiederhergestellt, wenn es sich um einen einfachen Wert und nicht um eine Bindung handelte.
Binding.RestoreBindingOrValueDer ursprüngliche Wert wird immer wiederhergestellt.

Der Standardwert ist „ Binding.RestoreBindingOrValue “.

Hinweis: Diese Eigenschaft dient der Abwärtskompatibilität mit früheren Versionen von Qt. Verwenden Sie sie nicht in neuem Code.

target : QtObject

Das zu aktualisierende Objekt. Sie müssen diese Eigenschaft verwenden, wenn das Bindungsziel kein „ id “-Attribut besitzt (beispielsweise wenn es sich bei dem Ziel um ein Singleton handelt). Andernfalls sind die folgenden beiden Codeausschnitte gleichwertig:

Binding { contactName.text: name }
Binding {
    target: contactName
    property: "text"
    value: name
}

Die erste Variante ist wesentlich kompakter, allerdings können Sie das Zielobjekt oder die Zieleigenschaft zur Laufzeit nicht ersetzen. Bei der zweiten Variante ist dies möglich.

value : var

Der Wert, der dem Zielobjekt und der Eigenschaft zugewiesen werden soll. Dies kann eine Konstante sein (was nicht besonders nützlich ist) oder ein gebundener Ausdruck.

Sie müssen diese Eigenschaft nur verwenden, wenn Sie das Bindungsziel nicht deklarativ angeben können. Andernfalls können Sie die Bindung direkt an das Ziel vornehmen.

when : bool

Diese Eigenschaft gilt, solange die Bindung aktiv ist. Sie sollte auf einen Ausdruck gesetzt werden, der den Wert „true“ ergibt, wenn die Bindung aktiv sein soll.

Binding {
    contactName.text: name
    when: list.ListView.isCurrentItem
}

Standardmäßig werden alle zuvor festgelegten Bindungen oder Werte wiederhergestellt, wenn die Bindung inaktiv wird. Sie können das Wiederherstellungsverhalten mithilfe der Eigenschaft „ restoreMode “ anpassen.

Siehe auch „ restoreMode “.

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