Qt QML:无法读取属性';xxx和x27;未定义的
我想知道:Qt QML:无法读取属性';xxx和x27;未定义的,qt,qml,qtquick2,qt-quick,Qt,Qml,Qtquick2,Qt Quick,我想知道: 为什么在上面的注释行中添加根id时它不起作用 如果子组件是从XXX.qml文件创建的,子组件如何访问同级组件的属性 id属性是一种“特殊类型”的属性,它只在“代码时间”解析,不能在运行时解析 root.watchLcd将无法工作,因为watchLcd是一个id,因此无法使用root.watchLcd id在逻辑上也仅在该特定源中工作,并且您只需要该特定的id无论对象树的结构如何,都不需要它的父id,如root.watchLcd 如果您想从另一个文件访问特定对象,自然不能通过其id实现
id
属性是一种“特殊类型”的属性,它只在“代码时间”解析,不能在运行时解析
root.watchLcd
将无法工作,因为watchLcd
是一个id
,因此无法使用root.watchLcd
id
在逻辑上也仅在该特定源中工作,并且您只需要该特定的id
无论对象树的结构如何,都不需要它的父id
,如root.watchLcd
如果您想从另一个文件访问特定对象,自然不能通过其id
实现。您可以为其使用属性或函数:
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.
}
}
}
另外,请注意属性别名的工作原理-它在许多情况下可能很有用,如果您只需要访问嵌套对象的属性,则可以使用别名将其公开,而无需从外部访问该对象
//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
}
}
}