子对象和对象之间的区别作为属性?

时间:2015-05-19 21:25:05

标签: qt qml

我想知道子对象或对象作为属性之间的区别:

Rectangle {
    Button {
        id: myButton

    }
}

Rectangle{
    property Button myButton: Button {

    }
}

我知道您可以从QML代码(see this thread)中的更多位置访问第一个示例中的按钮(通过id)。是否存在绩效差异或其他差异?

qt.io wiki对此没有帮助。

2 个答案:

答案 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,然后根据其类型将其复制到childrenresources属性中

另请注意,Item派生对象仅在构成场景图的可视对象树的一部分时可见,并且整个场景图只能有一个根。因此,您不能只将Item派生对象分配给任何属性,并期望它在没有额外工作的情况下可见。