QML SplitView:此控件如何将其子项处理为内部项?

时间:2018-10-13 06:12:59

标签: qt qml qt-quick qtquickcontrols

我查看了SplitView的源代码(%QT_SOURCE_PATH%\ qml \ QtQuick \ Controls \ SplitView.qml),发现它使用了3个项来操纵拆分器和项:

Item {
    id: contents
    visible: false
    anchors.fill: parent
}
Item {
    id: splitterItems
    anchors.fill: parent
}
Item {
    id: splitterHandles
    anchors.fill: parent
}

根据代码,功能 addItem_impl(item)将新项目放入项目 splitterItems 中。函数 addItem_impl(item)从函数 init()中调用,该函数传递ID为 contents 的Item中的每个子项>。但是我不知道如何将所有来自 root 项目的子级放入 内容 项目中?

1 个答案:

答案 0 :(得分:1)

通过default property

default property alias __contents: contents.data

来自documentation

  

对象定义可以具有一个默认属性。默认属性是如果在另一个对象的定义中声明一个对象但未将其声明为特定属性的值,则为其分配值的属性。

     

[...]

     

您会注意到,可以将子对象添加到任何基于Item的类型,而无需将其显式添加到children属性。这是因为Item的默认属性是其data属性,并且添加到此列表的某个Item中的所有项目都会自动添加到其子级列表中。

     

默认属性对于重新分配项目的子项很有用。请参见TabWidget示例,该示例使用默认属性自动将TabWidget的子级重新分配为内部ListView的子级。另请参见扩展QML。