在 QML 中创建动态对象

在 QML 中创建动态对象

我是 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() 信号。

希望这可以帮助。

相关内容