Элементы объявляются при помощи своих имён, но описаны при помощи их свойств или свойств созданных пользователем. Свойства — это пара ключ-значение. Например: width:100; text:'Greetings'; color:'#FF0000'
. Свойства имеют чётко определённый тип и могут иметь начальное значение.
Text { // (1) идентификатор id: thisLabel // (2) установить позицию по x и y x: 24; y: 16 // (3) установить высота=2*ширина height: 2 * width // пользовательские свойства // (4) свойство время property int times: 24 // (5) свойство псевдоним property alias anotherTimes: thisLabel.times // (6) установить текст добавив значение text: "Greetings " + times // (7) шрифт это групповое свойство font.family: "Ubuntu" font.pixelSize: 24 // (8) KeyNavigation является вложенным свойство KeyNavigation.tab: otherLabel // (9) обработчик сигнала при изменении свойств onHeightChanged: console.log('height:', height) // необходим для получения ключевых событий focus: true // изменить базовый цвет при фокусировки color: focus?"red":"black" }
Пройдёмся по различным особенностям свойств:
1) id
— это особое свойство как value, оно используется для ссылки на элементы внутри файла QML (так называемый документ QML). id
не является типом «строка», но его достаточно для идентификации, так же он является частью синтаксиса QML. id
должен быть уникальным в рамках документа, он не может быть переопределён с другим значением, и не может быть запрошен по этому значению.
2) В свойство можно установить значение, в зависимости от его типа. Если для свойство значение не указано, то свойство будет иметь начальное значение. Вам необходимо обратится к документации по конкретному элементу для получения дополнительной информации о начальном значении.
3) Свойство может быть зависимым от одного или более других свойств. Это называется связывание. Связанные свойства обновляются, когда изменяются свойства от которых они зависят. Это работает как договор. В примере выше, высота(height
) всегда должна быть в два раза больше ширины(width
).
4) Добавление собственных свойств к элементу осуществляется с помощью использования ключевого слова property
, типа, имени и не обязательного первоначального значения. (property <тип> <имя> : <значение>
). Если начальное значение не задано, то оно выбирается системой автоматически. (о.а. Вот тут мне не совсем понятно, что за произвольное значение должно тут ставиться и по какому принципу это делается. Если кто знает, напишите в комментариях.)
Примечание
Вы можете объявить одно свойство, которое станет свойством поумолчанию, если свойство с таким же именем не объявлено ранее, свойство объявляется ключевым словом default
.
5) Ещё одним важным способом декларирования свойств, является объявление с использование ключевого слова alias
. (property alias <name> : <reference>
) Ключевое слово alias
позволяет нам направить свойство или сам объект изнутри типа, к внешней области. Мы будем использовать эту технику позже при определении компонентов для экспорта внутренних свойств или id
элементов в корневой уровень. Для свойства alias
не нужно указывать тип, он использует ссылочный тип или объект.
6) text: "Greetings " + times
Свойство text
зависит от пользовательского свойства times
типа int
. int
это базовый тип, который автоматически может конвертироваться в тип string
. Это выражение является ещё одним примером связывания — результат в тексте обновляется при каждом изменение свойства times
.
7) Некоторые свойства являются групповыми свойствами. Этот способ используется для лучшего структурирования и связывания , при этом связанные свойства должны быть сгруппированы.(о.а не совсем понятно) Другой способ записи сгруппированных свойств font { family: "Ubuntu"; pixelSize: 24 }
.
8) Для каждого свойства вы можете задать обработчик сигналов. Этот обработчик вызывается после изменения свойства. В данном примере, мы хотим выдавать сообщение в консоль, всякий раз, когда меняется высота.
Предупреждение
Идентификатор элемента следует использовать только ссылаясь на элементы внутри документа (например в текущем файле). QML предоставляет механизм, который называется «динамическая область видимости». Он переписывает идентификаторы ранее загруженных документов, на идентификаторы документов, которые загружены позже. Данный механизм позволяет ссылаться на элемент из ранее загруженных документов по его идентификатору, в тех случаях, когда он не перезаписан. Это как создание глобальных переменных. К сожалению, использование данного механизма, приводит к написанию плохого кода в тех местах программы где есть зависимость от порядка исполнения . Его нельзя отключить. Пожалуйста используйте этот механизм с особой осторожностью, лучше конечно не использовать вообще. Если элемент необходимо использовать вне родительского элемента, то лучше его экспортировать используя свойство родителя или корневого элемента.
Оригинал : http://qmlbook.org/ch04/index.html#qml-syntax
Пример: qmlbook4-1-1.qml