Binding QML Type
Ermöglicht die beliebige Erstellung von Eigenschaftsbindungen. Mehr...
| Import Statement: | import QtQml |
Eigenschaften
- delayed : bool
- property : string
- restoreMode : enumeration
- target : QtObject
- value : var
- when : bool
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.mouseXDer 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:
| Constant | Beschreibung |
|---|---|
Binding.RestoreNone | Der ursprüngliche Wert wird überhaupt nicht wiederhergestellt |
Binding.RestoreBinding | Der ursprüngliche Wert wird wiederhergestellt, wenn es sich um eine andere Bindung handelte. In diesem Fall ist die alte Bindung wieder wirksam. |
Binding.RestoreValue | Der ursprüngliche Wert wird wiederhergestellt, wenn es sich um einen einfachen Wert und nicht um eine Bindung handelte. |
Binding.RestoreBindingOrValue | Der 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.