Связывание типа QML
Включает произвольную создание связей свойств. Подробнее...
| Заявление об импорте: | import QtQml 2.14 |
Свойства
- delayed : bool
- property : string
- restoreMode : перечисление
- target : Объект
- value : любой
- when : bool
Подробное описание
В 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
} restoreMode : перечисление
Это свойство может быть использовано для описания того, нужно ли и как восстановить исходное значение при отключении связи.
Возможные значения:
- Binding.RestoreNone Исходное значение вообще не восстанавливается
- Binding.RestoreBinding Исходное значение восстанавливается, если это была другая связь. В этом случае снова активна старая связь.
- Binding.RestoreValue Исходное значение восстанавливается, если это было простое значение, а не связь.
- Binding.RestoreBindingOrValue Исходное значение всегда восстанавливается.
Предупреждение: Значение по умолчанию — Binding.RestoreBinding. Это изменится в Qt 6.0 на Binding.RestoreBindingOrValue.
Если вы полагаетесь на какое-либо конкретное поведение в отношении восстановления простых значений при отключении связей, вам следует перейти к явной установке restoreMode.
Зависимость от restoreMode, который не восстанавливает предыдущую связь или значение для конкретного свойства, приводит к предупреждению во время выполнения.
Это свойство было представлено в Qt 5.14.
target : Объект
Объект, который должен быть обновлен.
value : любой
Значение, которое должно быть установлено для целевого объекта и свойства. Это может быть константа (что не очень полезно) или связанное выражение.
when : bool
Это свойство указывает, когда связь активна. Оно должно быть установлено на выражение, которое вычисляет значение «true», когда вы хотите, чтобы связь была активной.
Binding {
target: contactName; property: 'text'
value: name; when: list.ListView.isCurrentItem
} Когда связь снова становится неактивной, любые прямые связи, которые были ранее установлены на свойстве, будут восстановлены.
Примечание: По умолчанию ранее установленное литеральное значение не восстанавливается, когда связь Binding становится неактивной. Вместо этого сохраняется последнее значение, установленное активной связью Binding. Вы можете настроить поведение восстановления для литеральных значений и связей с помощью свойства restoreMode. Значение по умолчанию изменится в Qt 6.0.
См. также restoreMode.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qml-qtqml-binding.html