Связывание типа QML
Включает произвольное создание связей свойств. Подробнее...
| Оператор импорта: | import QtQml 2.12 |
Свойства
Подробное описание
В QML связи свойств приводят к зависимости между свойствами различных объектов.
Связывание с недоступным свойством
Иногда необходимо связать свойство объекта со свойством другого объекта, который не создается напрямую в QML, например, свойством класса, экспортированного в QML с помощью C++. Можно использовать тип Binding для установления этой зависимости; связь любого значения с любым свойством любого объекта.
Например, в приложении C++, отображающем свойство "app.enteredText" в QML, можно использовать Binding для обновления свойства enteredText.
TextEdit { id: myTextField; text: "Please type here..." }
Binding { target: app; property: "enteredText"; value: myTextField.text } Когда text изменяется, свойство C++ enteredText автоматически обновляется.
Условные связи
В некоторых случаях может потребоваться изменить значение свойства, когда выполняется определённое условие, но оставить его неизменным в противном случае. Часто это невозможно сделать с прямыми связями, поскольку нужно предоставить значения для всех возможных ветвей.
Например, фрагмент кода ниже приводит к появлению предупреждения при отпускании мыши. Это происходит потому, что значение связи неопределено, когда мышь не нажата.
// produces warning: "Unable to assign [undefined] to double value" value: if (mouse.pressed) mouse.mouseX
Тип Binding может предотвратить это предупреждение.
Binding on value {
when: mouse.pressed
value: mouse.mouseX
} Тип Binding восстанавливает любые ранее установленные прямые связи со свойством.
См. также Qt QML.
Документация по свойствам
delayed : bool
Это свойство определяет, следует ли задерживать связь.
Задержанная связь немедленно не обновит целевой объект, а подождёт, пока очередь событий не будет очищена. Это можно использовать для оптимизации или для предотвращения назначения промежуточных значений.
Binding {
target: contactName; property: 'text'
value: givenName + " " + familyName; when: list.ListView.isCurrentItem
delayed: true
} Это свойство было добавлено в Qt 5.8.
property : string
Свойство, которое нужно обновить.
Это может быть групповое свойство, если выражение приводит к обращению к свойству типа значения. Например:
Item {
id: item
property rect rectangle: Qt.rect(0, 0, 200, 200)
}
Binding {
target: item
property: "rectangle.x"
value: 100
} target : Объект
Объект, который нужно обновить.
value : любой
Значение, которое нужно установить для целевого объекта и свойства. Это может быть константа (что не очень полезно) или связанное выражение.
when : bool
Это свойство определяет, когда связь активна. Оно должно быть установлено в выражение, которое оценивается как истинное, когда вы хотите, чтобы связь была активна.
Binding {
target: contactName; property: 'text'
value: name; when: list.ListView.isCurrentItem
} Когда связь снова становится неактивной, любые прямые связи, ранее установленные на свойстве, будут восстановлены.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qml-qtqml-binding.html