Возьмите этот код:
import QtQuick 1.1
Rectangle {
width: 100
height: 100
property color fromColor: "red"
property color toColor: "blue"
gradient: Gradient {
property color fromColor: "yellow"
property color toColor: "green"
GradientStop { position: 0; color: fromColor }
GradientStop { position: 1; color: toColor }
}
}
Почему именно Gradient
выбирает свои свойства fromColor
и toColor
из окружающего элемента?
Где это задокументировано (хотя бы в комментариях к исходному коду, а лучше в официальной документации )?
Обратите внимание :этот «пример обфускации QML взят из доклада Гириша Рамакришнана Qt Quick Best Practices and Design Patterns(перемотать на 25-ю минуту ), где он действительно говорит, что дело чрезвычайно сложное и должно иметь объем компонентов и тому подобное, но не имеет времени объяснять, почему.
[ОБНОВЛЕНИЕ]
Итак, как сообщает MartinJ ниже, компонент верхнего -уровня в элементе -свойство (не только элемент -дочерний )иерархии имеет свои свойства, видимые для всех свойств, однако глубоко вложенных, с приоритетом свойств этих свойств, а все свойства «промежуточных» элементов вообще не видны.
Вот небольшой пример:
import QtQuick 1.1
Item {
Item {
property string s: "parent-str"
Item { Component.onCompleted: console.log(s) }
}
}
Это дает:"ReferenceError: Can't find variable: s"
И это работает, как и ожидалось:
import QtQuick 1.1
Item {
property string s: "parent-str"
Item { Component.onCompleted: console.log(s) }
}
, вывод "parent-str"
.
См. комментарии MartinJ ниже.