我想知道子对象或对象作为属性之间的区别:
Rectangle {
Button {
id: myButton
}
}
和
Rectangle{
property Button myButton: Button {
}
}
我知道您可以从QML代码(see this thread)中的更多位置访问第一个示例中的按钮(通过id)。是否存在绩效差异或其他差异?
qt.io wiki对此没有帮助。
答案 0 :(得分:0)
好吧,在第二种情况下,该按钮将不可见。它将作为属性存在,但由于它不是对象树中的子元素,因此不会显示它。因此,将可视元素作为属性几乎没用。
对象及其属性之间没有父/子关系。它仅存在于QObject
和派生树中,这是构建Qt应用程序的基本概念。此外,这意味着您不能像孩子一样拥有int
之类的东西,它只能是一个属性。属性意味着数据,而不是结构。
正如cmannett85所指出的那样,孩子们也会根据他们的类型作为列表属性进行接口,但是在QML中你应该很少关注它,如果有的话...但是当孩子们作为属性接口时,属性不会得到免费治疗。
请注意,您可以双管齐下。
Rectangle{
property alias myButton: button
Button {
id: button
}
}
这样,按钮将是可见的,如果您想从当前QML文件外部访问它,您仍然可以将其作为属性引用,这不适用于id
s - 它们是仅对它们所在的QML文件有效。动态范围适用于属性,但不适用于ID。
答案 1 :(得分:0)
两个对象都附加到属性。 Item
中的所有汇总对象都附加到默认data
property,然后根据其类型将其复制到children
或resources
属性中
另请注意,Item
派生对象仅在构成场景图的可视对象树的一部分时可见,并且整个场景图只能有一个根。因此,您不能只将Item
派生对象分配给任何属性,并期望它在没有额外工作的情况下可见。