Binding QML Type
Ermöglicht die willkürliche 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 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:
Konstante | 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 handelt. In diesem Fall ist die alte Bindung wieder gültig. |
Binding.RestoreValue | Der ursprüngliche Wert wird wiederhergestellt, wenn es sich um einen einfachen Wert und nicht um eine Bindung handelt. |
Binding.RestoreBindingOrValue | Der 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.