![在 QML 中创建动态对象](https://linux22.com/image/979439/%E5%9C%A8%20QML%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E5%8A%A8%E6%80%81%E5%AF%B9%E8%B1%A1.png)
我是 QML 的新手,想了解在将代码拆分到不同文件时对象创建是如何进行的(因为这感觉像是一种很好的代码实践)。
我知道我可以调用同一个文件中某个项目的属性:
// MyItem.qml
Item {
id: myItem
property string name: "Myself"
onClicked: {
console.log(myItem.name)
}
}
但是如何在不同的文件中创建同一项目的实例?
// Main.qml
Button {
onClicked: {
console.log(myItem.name)
}
}
引发一个ReferenceError: name is not defined
错误,我猜测其意思是:“无法调用未定义对象的属性名称”。
这是 QML 中的常见做法吗(没有看到很多这样做的例子)还是每个人都只是把所有内容放在同一个文件中?
答案1
你可以这样做:
// Main.qml
MyItem {
id: thisIsMyItem
}
Button {
onClicked: console.log(thisIsMyItem.name)
}
这个想法是,您可以在由其 ID 引用的同一文档中使用您声明的组件。在 QML 中,您可以将这些文件称为“文档”。
另外,您不需要在 MyItem.qml 中使用 myItem id,只需使用其名称引用 name 属性即可。当然,当同一文档中有多个具有“name”属性的组件时,使用 id 是必要的。
// MyItem.qml
Item {
id: myItem
property string name: "Myself"
Item {
id: secondItem
property string name: "Second Item"
Component.onCompleted: console.log("This item's name is " + name + ", and parent item's name is " + myItem.name)
}
}
需要注意的是:MyItem.qml 中的 onClicked 会出现语法错误,因为 Item 没有 clicked() 信号。
希望这可以帮助。