Binding QML Type

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

Import Statement: import QtQml

Eigenschaften

Ausführliche 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 eine 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"
value: if (mouse.pressed) mouse.mouseX

Der Bindungstyp kann diese Warnung verhindern.

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

Der Bindungstyp stellt alle zuvor festgelegten direkten Bindungen für die Eigenschaft wieder her.

Siehe auch Qt Qml.

Eigenschaft Dokumentation

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 als 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 ist mit Laufzeitkosten verbunden, 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 zum Zugriff auf eine Eigenschaft eines Werttyps führt. 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 (zum Beispiel, 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 auf das Zielobjekt und die Eigenschaft gesetzt 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 gilt, wenn die Bindung aktiv ist. Sie sollte auf einen Ausdruck gesetzt 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.


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