有几次我想要访问绑定到另一个属性的组件的属性。我花了好几天试图弄清楚如何做到这一点并失败了。以下是我正在尝试做的一个简单示例。
TabView {
Component.onCompleted: console.log(style.frameOverlap)
// OR tvStyle.frameOverlap
style: TabViewStyle {
id: tvStyle
frameOverlap: 5
}
}
没有这样的作品。我完全不知道如何静态地或作为实例访问这些成员。有人可以向我解释一下这样的事情是否可能?
感谢。
答案 0 :(得分:1)
简短的回答是你需要写:
Component.onCompleted: console.log(__styleItem.frameOverlap)
答案越长,'style'属性就是一个Component。组件是记住声明树的东西,可以根据需要创建对象。但是,它不会暴露那个记住的声明,因此当您尝试访问frameOverlap
属性时,它不存在。
理论上,您可以调用style.createObject
来创建一个对象,并检查它的属性,但这会创建另一个不必要的实例,因此您可以查看TabView.qml,注意它已经使用Loader创建了一个实例,并将其存储在名为__styleItem
的属性中,因此使用我上面给出的代码。
当然,访问内部属性并不是一个特别好的主意,但在实践中可能没问题。理想情况下,应该能够实例化TabViewStyle并将实例绑定到style
属性,TabView可以确定它是组件还是对象,但我不确定它是否可行。