Spec-Zone.ru › Qt 5.15

Связывание типа 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API