Enigma do escopo do componente QML

Pegue este código:

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 }
    }
}

Por que exatamente oGradient escolha o seufromColor etoColor propriedades do elemento envolvente?

Onde isso é documentado (pelo menos dentro dos comentários do código-fonte, melhor dentro dos documentos oficiais)?

Nota: este "exemplo de obfuscação QML é da palestra de Girish RamakrishnanQt Quick Best Practices e Design Patterns (retroceder aos 25 minutos), onde ele diz que a coisa é extremamente complicada e tem que com escopo de componentes e assim, mas não tem tempo para explicar por quê.

[ATUALIZAR]

Assim, como MartinJ conta a seguir, o componente de nível superior na hierarquia de propriedade de elemento (não apenas element-child) tem suas propriedades visíveis para todas as propriedades, mas com aninhamento profundo, sendo a precedência das propriedades dessas propriedades e todas as propriedades de itens "intermediários" não vistos.

Aqui está um pequeno exemplo:

import QtQuick 1.1

Item {
    Item {
        property string s: "parent-str"
        Item { Component.onCompleted: console.log(s) }
    }
}

Isto dá:"ReferenceError: Can't find variable: s"

E isso funciona como esperado:

import QtQuick 1.1

Item {
    property string s: "parent-str"
    Item { Component.onCompleted: console.log(s) }
}

saída"parent-str".

Por favor, veja os comentários de MartinJ abaixo.

questionAnswers(2)

yourAnswerToTheQuestion