Связывание типа QML
Позволяет произвольно создавать связывания свойств. Подробнее...
| Заявление об импорте: | import QtQml 2.15 |
Свойства
- 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 становится неактивным. Вместо этого сохраняется последнее значение, установленное неактивным связыванием. Вы можете настроить поведение восстановления для литерных значений и связываний с помощью свойства 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.15/qml-qtqml-binding.html