QtQuick - "parent item"是什么意思?



以下QML代码:

Window {
id: window
width: 450
height: 700
visible: true
StackView {
id: mainStack
property Item itemTest: Item {
id: itemTest
ColumnLayout {
id: mainLayout
width: mainStack.width
ScrollView {
id: scrollview
Layout.fillWidth: true
Layout.fillHeight: true
clip: true
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
ColumnLayout{
id: colLayout
anchors.fill: scrollview
}
}
}
}
initialItem: itemTest
anchors.fill: parent
}
}

输出";QML ColumnLayout:无法锚定到不是父项或同级项的项">

替换"anchors.fill:scrollview;通过";anchors.fill:parent;在上面的代码中,使此消息消失,但ColumnLayout似乎没有填充ScrollView

考虑到这种行为,我得出的结论是,这个QML文件中的ScrollView实际上不是"的父级;colLayout";,这违背了我对QML中育儿方式的第一直觉

有人能向我解释一下关键字";"父";QML中非常感谢。

问题是Controls使用了contentItem的概念。虽然ScrollView本身是一个控件,而控件本身又是一个项,但子项是另一个名为contentItem的项的父级。

更多信息请点击此处:

https://doc.qt.io/qt-5/qml-qtquick-controls2-control.html#contentItem-道具

另见评论:

注意:大多数控件使用内容项的隐式大小来计算控件本身的隐式尺寸。如果将内容项替换为自定义项,则还应考虑为其提供合理的隐式大小(除非它是像Text这样有自己隐式大小的项(。

如果不想扩大ColumnLayout以匹配contentItem,contentItem将自动调整大小以适应ColumnLayout的隐含大小。

如果您试图获得的效果是将ColumnLayout的大小与ScrollView的大小相匹配,那么请使用以下内容:

ColumnLayout{
id: colLayout
implicitWidth: scrollview.width
implicitHeight: scrollview.height
height: implicitHeight
width: implicitWidth
}

但既然如此,为什么还要使用ScrollView呢?通常情况下,您会允许ColumnLayout根据其子项来管理其隐式大小。当contentItem最终溢出ScrollView时,它开始自动滚动。

相关内容

最新更新