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