Auf dieser Seite

Binding QML Type

Ermöglicht die willkürliche Erstellung von Eigenschaftsbindungen. Mehr...

Import Statement: import QtQml

Eigenschaften

Detaillierte Beschreibung

In QML führen Eigenschaftsbindungen zu einer Abhängigkeit zwischen den Eigenschaften von verschiedenen Objekten.

Bindung an eine unzugä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 z.B. eine Eigenschaft einer Klasse, die von C++ nach QML exportiert wurde. Sie können den Typ Binding verwenden, um diese Abhängigkeit herzustellen, indem Sie einen beliebigen Wert an die Eigenschaft eines beliebigen Objekts binden.

In einer C++-Anwendung, die eine Eigenschaft "app.enteredText" in QML abbildet, können Sie beispielsweise 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öchten Sie den Wert einer Eigenschaft ändern, wenn eine bestimmte Bedingung erfüllt ist, ihn aber ansonsten unverändert lassen. Oft ist dies mit direkten Bindungen nicht möglich, da Sie Werte für alle möglichen Verzweigungen angeben müssen.

Der folgende Codeausschnitt führt beispielsweise zu einer Warnung, wenn Sie die Maus loslassen. Das liegt daran, dass der Wert der Bindung undefiniert ist, wenn die Maus nicht gedrückt wird.

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

Der Bindungstyp kann diese Warnung verhindern.

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

Der Bindungstyp 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, auch wenn when false ist.

Dies kann zu Warnungen führen, wenn die Bindung z. B. zum Schutz vor einem Wert verwendet wird, der 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 eine id hat, können Sie die in Multiple targets in one Binding beschriebene Syntax verwenden, die auch bewirkt, dass der Bindungsausdruck nur ausgeführt wird, wenn die Binding aktiviert ist:
    Binding {
        when: root.object !== null
        root.targetProperty: root.object.someProperty
    }
  • Sie können die Prüfung in der Bindung wiederholen und früh zurückkehren:
    Binding on targetProperty {
        when: root.object !== null
        value: {
            if (root.object === null)
                return
            return root.object.someProperty
        }
    }

Mehrere Ziele in einer Bindung

Sie können in einem Binding-Element mehrere Datenflüsse zu demselben Objekt angeben:

Text {
    id: t1
}

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

Sie können auch mehrere Datenflüsse mit unterschiedlichen Zielobjekten in einem einzigen Datenflusselement angeben:

Text {
    id: t1
}

Text {
    id: t2
}

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

Siehe auch Qt Qml.

Dokumentation der Eigenschaft

delayed : bool

Diese Eigenschaft gibt an, 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 worden ist. Dies kann zur Optimierung verwendet 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 verzögerten Eigenschaft verursacht Laufzeitkosten, da das Bindungselement einen Proxy für den Wert erstellen muss, damit es seine Anwendung auf das eigentliche Ziel verzögern kann. Bei Verwendung der Eigenschaften target und property sind diese Kosten geringer, da die Eigenschaft value als Proxy wiederverwendet werden kann. Bei Verwendung des oben gezeigten Formulars weist Binding ein separates Objekt mit einem dynamischen Meta-Objekt zu, um die Proxy-Werte zu speichern.

property : string

Die zu aktualisierende Eigenschaft.

Dies kann eine Gruppeneigenschaft sein, wenn der Ausdruck den Zugriff auf eine Eigenschaft eines Werttyps zur Folge hat. Ein Beispiel:

Item {
    id: item

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

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

Sie brauchen diese Eigenschaft nur zu verwenden, wenn Sie das Bindungsziel nicht deklarativ angeben können. Der folgende Codeschnipsel entspricht der obigen Bindung, ist aber kompakter:

Binding { item.rectangle.x: 100 }

restoreMode : enumeration

Diese Eigenschaft kann verwendet werden, um zu beschreiben, ob und wie der ursprüngliche Wert wiederhergestellt werden soll, wenn die Bindung deaktiviert wird.

Die möglichen Werte sind:

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

Der Standardwert ist Binding.RestoreBindingOrValue.

Hinweis: Diese Eigenschaft existiert aus Gründen 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 hat (z. B. wenn das Ziel ein Singleton ist). Andernfalls sind die beiden folgenden Codeabschnitte gleichwertig:

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

Die erste Variante ist viel kompakter, aber Sie können das Zielobjekt oder die Eigenschaft zur Laufzeit nicht ersetzen. Mit der zweiten Variante können Sie das.

value : var

Der Wert, der für das Zielobjekt und die Eigenschaft festgelegt werden soll. Dies kann eine Konstante (die nicht sehr nützlich ist) oder ein gebundener Ausdruck sein.

Sie brauchen diese Eigenschaft nur zu verwenden, wenn Sie das Bindungsziel nicht deklarativ angeben können. Ansonsten können Sie direkt an das Ziel binden.

when : bool

Diese Eigenschaft legt fest, wann die Bindung aktiv ist. Sie sollte auf einen Ausdruck festgelegt werden, der als wahr ausgewertet wird, wenn die Bindung aktiv sein soll.

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

Standardmäßig werden alle Bindungen oder Werte, die zuvor festgelegt wurden, wiederhergestellt, wenn die Bindung inaktiv wird. Sie können das Wiederherstellungsverhalten mit 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.