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