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.