Spec-Zone.ru › Qt

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

Spec-Zone.ru

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