我有3个文件:
mainWindow.qml
Rectangle{
id: container
Services{
id: loger
}
...//there is element code
}
CategoryDelegate.qml
Item {
id: delegate
...//there is element code
}
和MovieDialog.qml
Rectangle {
id: movieDialog
...//there is element code
}
我需要在moviedialog和categorydelegate中使用Services函数。从类别委托我可以使用它
Item {
id: delegate
property string type: container.loger.getMovie(1)
//this code works well
}
但是从moviedialog我无法接受它!
Rectangle {
id: movieDialog
property string type: container.loger.getMovie(1)
//this will not work
}
我得到错误:" TypeError:无法调用方法' getMovie'未定义"。
我该如何解决? 提前谢谢!
答案 0 :(得分:3)
通常,这取决于您的QML文件的关系。 您可以直接访问父文件的ID,但不能访问子文件。
示例:
// Parent.qml
Item {
id: parent1
// has NO access to child1 id, you have to define your own id in this file (child2)
// you can also use the same id again (child1) if you want
Child {
id: child2
// has access to the parent1 id
}
}
// Child.qml
Item {
id: child1
// has access to the parent1 id if only included into Parent.qml
}
我还注意到,在您的示例中,您已更改了ID,这是不可能的,ID在当前上下文中始终是唯一的,因此您应该只使用container.loger.getMovie(1)
而不是loger.getMovie(1)
。如果您需要从文件外部访问子项,则需要定义属性别名,例如:
property alias log : loger
在Rectangle中(文件中的父项,因此您可以从外部访问它)。这实际上会创建一个类型为Services
的公共属性,因此您可以像访问文件外部或任何需要的任何其他属性一样访问它。
我希望这有助于解决您的问题。