qml在另一个文件中使用元素id

时间:2014-04-30 07:28:27

标签: qml

我有3个文件:

mainWindow.qml

       Rectangle{
            id: container

        Services{
            id: loger
        }
        ...//there is element code
 }

CategoryDe​​legate.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'未定义"。

我该如何解决? 提前谢谢!

1 个答案:

答案 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的公共属性,因此您可以像访问文件外部或任何需要的任何其他属性一样访问它。

我希望这有助于解决您的问题。