ScrollView 内的 ColumnLayout 内的 ListView 无法填充 height/width
ListView inside ColumnLayout inside ScrollView not filling available height/width
我想在 TextFeild、CheckBoxes 和一些 Button 中显示一些数据,然后显示一个长列表。我希望整个页面都可以滚动,而不仅仅是 ListView。我怎样才能做到这一点?
这是我到现在为止的想法:-
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
ScrollView { //comment out this
anchors.fill: parent //comment out this
ColumnLayout {
anchors.fill: parent
spacing: 5
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: 100
color: "green"
}
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: 100
color: "red"
}
ListView {
model : 20
Layout.fillWidth: true
Layout.fillHeight: true
delegate: Frame {
Label {
text: modelData + "th Item"
}
}
}
}
} //comment out this
}
这不起作用。它只显示 ListView 的一个单元格并且不可滚动。如何让 ListView 填充 height/width 并使整个页面可滚动?
第一个问题是,如果 ScrollView
的内容与 ScrollView
的高度相同,则无法滚动。它需要内容更大。否则没有什么可以滚动到。所以适合 parent 高度的 ColumnLayout
是行不通的。在这种情况下,Column
优于 ColumnLayout
,因为它会增长到其 children 的高度,而不是将其 children 调整为自己的大小。
第二个问题是 ListView
没有正确计算出它的高度。我不完全确定为什么不,但我可以通过使用 childrenRect.height
.
让你的例子工作
ScrollView {
anchors.fill: parent
Column {
width: parent.width
spacing: 5
Rectangle {
width: parent.width
height: 100
color: "green"
}
Rectangle {
width: parent.width
height: 100
color: "red"
}
ListView {
model : 20
width: parent.width
height: childrenRect.height
delegate: Frame {
Label {
text: modelData + "th Item"
}
}
}
}
}
我想在 TextFeild、CheckBoxes 和一些 Button 中显示一些数据,然后显示一个长列表。我希望整个页面都可以滚动,而不仅仅是 ListView。我怎样才能做到这一点?
这是我到现在为止的想法:-
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Window 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
ScrollView { //comment out this
anchors.fill: parent //comment out this
ColumnLayout {
anchors.fill: parent
spacing: 5
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: 100
color: "green"
}
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: 100
color: "red"
}
ListView {
model : 20
Layout.fillWidth: true
Layout.fillHeight: true
delegate: Frame {
Label {
text: modelData + "th Item"
}
}
}
}
} //comment out this
}
这不起作用。它只显示 ListView 的一个单元格并且不可滚动。如何让 ListView 填充 height/width 并使整个页面可滚动?
第一个问题是,如果 ScrollView
的内容与 ScrollView
的高度相同,则无法滚动。它需要内容更大。否则没有什么可以滚动到。所以适合 parent 高度的 ColumnLayout
是行不通的。在这种情况下,Column
优于 ColumnLayout
,因为它会增长到其 children 的高度,而不是将其 children 调整为自己的大小。
第二个问题是 ListView
没有正确计算出它的高度。我不完全确定为什么不,但我可以通过使用 childrenRect.height
.
ScrollView {
anchors.fill: parent
Column {
width: parent.width
spacing: 5
Rectangle {
width: parent.width
height: 100
color: "green"
}
Rectangle {
width: parent.width
height: 100
color: "red"
}
ListView {
model : 20
width: parent.width
height: childrenRect.height
delegate: Frame {
Label {
text: modelData + "th Item"
}
}
}
}
}