我试图自定义Qt抽屉菜单(https://doc.qt.io/qt-5/qtquickcontrols2-gallery-gallery-qml.html)。 我所做的主要更改是通过单独的视图ProjectList替换Pane块:
StackView {
id:homeView
anchors.fill: parent
initialItem:ProjectsList{
}
}
}
ProjectList.qml:
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import QtQuick.Controls.Material 2.0
ScrollablePage {
id:projectsListPage
ListView {
id: listView2
anchors.fill: parent
delegate: ItemDelegate {
width: parent.width
text: model.title
}
model: ListModel {
ListElement { title: qsTr("2Projects list2j") }
ListElement { title: qsTr("Projects liste") }
ListElement { title: qsTr("Projects listr") }
ListElement { title: qsTr("Projects list3") }
}
}
}
不幸的是,我只能看到列表中的一行,其他行是隐藏的,但我可以滚动它。请帮帮我,用ScrollView填充整个页面(高度属性不是工作:()
ScrollablePage:
import QtQuick 2.7
import QtQuick.Controls 2.0
Page {
id: page
default property alias content: pane.contentItem
Flickable {
anchors.fill: parent
contentHeight: pane.implicitHeight
flickableDirection: Flickable.AutoFlickIfNeeded
Pane {
id: pane
width: parent.width
}
ScrollIndicator.vertical: ScrollIndicator { }
}
}
答案 0 :(得分:0)
首先:ListView
本身是Flickable
所以它本身可以滚动。现在,您在Flickable
内打包Flickable
,这似乎既不必要又有问题。
Flickable
的外ScrollablePage
的大小由height
的{{1}}确定,Pane
的高度由Pane
的大小 - 即0.因此很明显,这不起作用。
您可以将ListView
的高度设置为自己的ListView
,这样可以正常工作,但是您已经加载了所有元素,并且不再有动态创建和销毁的利润。
如果我理解正确,您希望页面尽可能大,但最大大小为contentItem.height
的父级。
我建议您不要使用StackView
,而应使用常见的ScrollablePage
,并直接打包Page
。让ListView
填充ListView
并将Page
设置为Page.implicitHeight
或类似的内容。
你肯定必须为Math.max(parent.height, listView.contentItem.height)
设置一个大小,因为它没有提供有意义的implicitHeight !!!