ApplicationWindow {
id: root
property string rootName: "--rootName"
visible: true
width: 800
height: 400
title: qsTr("WatchFace Maker")
WatchLcd{
property string watchLcdInApp: "watchLcdInApp"
id: watchLcd
}
TextAdder{
id: textAdder
Component.onCompleted: {
console.log("APP: ", root.watchLcd.watchLcdInApp)//#Error!!! remove root, it works.
}
}
}
我想知道:
为什么在上面的注释行中添加root id时它不起作用?
如果从XXX.qml文件创建子组件,子组件如何访问兄弟组件的属性?
答案 0 :(得分:3)
id
属性是属性的“特殊类型”,它仅在“代码时间”解析,在运行时无法解析。
root.watchLcd
无法使用,因为watchLcd
是id
,因此无法使用root.watchLcd
解析
id
在逻辑上也仅适用于该特定来源,您只需要该特定id
,无论对象树的结构如何,您都不需要其父id
如root.watchLcd
如果您想从另一个文件访问特定对象,当然,这不会通过其id
发生。您可以使用属性或函数:
//SomeItem.qml
Item {
property alias text : obj.text
Item {
id: obj
property string text
}
property Item object : obj
function getObj() { return obj }
}
/main.qml
Window {
visible: true
SomeItem {
id: item
text: "someText"
}
SomeItem {
Component.onCompleted: {
//console.log(item.obj.text) // TypeError: Cannot read property 'text' of undefined
console.log(item.object.text) // someText
console.log(item.getObj().text) // someText
}
}
}
另外,请注意property alias
如何工作 - 在许多情况下它可能很有用,如果您需要访问的是嵌套对象的属性,则可以使用别名公开它,而无需在外部访问该对象。 / p>