如何在QML中访问绑定到属性的组件

时间:2015-10-05 06:18:32

标签: qml

有几次我想要访问绑定到另一个属性的组件的属性。我花了好几天试图弄清楚如何做到这一点并失败了。以下是我正在尝试做的一个简单示例。

TabView {
  Component.onCompleted: console.log(style.frameOverlap)
  // OR tvStyle.frameOverlap

  style: TabViewStyle {
    id: tvStyle
    frameOverlap: 5
  }
}

没有这样的作品。我完全不知道如何静态地或作为实例访问这些成员。有人可以向我解释一下这样的事情是否可能?

感谢。

1 个答案:

答案 0 :(得分:1)

简短的回答是你需要写:

Component.onCompleted: console.log(__styleItem.frameOverlap)

答案越长,'style'属性就是一个Component。组件是记住声明树的东西,可以根据需要创建对象。但是,它不会暴露那个记住的声明,因此当您尝试访问frameOverlap属性时,它不存在。

理论上,您可以调用style.createObject来创建一个对象,并检查它的属性,但这会创建另一个不必要的实例,因此您可以查看TabView.qml,注意它已经使用Loader创建了一个实例,并将其存储在名为__styleItem的属性中,因此使用我上面给出的代码。

当然,访问内部属性并不是一个特别好的主意,但在实践中可能没问题。理想情况下,应该能够实例化TabViewStyle并将实例绑定到style属性,TabView可以确定它是组件还是对象,但我不确定它是否可行。