如果我在列表视图中选择一个项目,我希望列表在一个简短的动画中滚动以将当前选择的项目放在列表的顶部,并移动标题向上,看不到。它可以与以下代码一起使用。但是,当我想向下滚动以再次查看列表标头时,它总是回到列表的顶部(第一项(。这很可能是由highlightRangeMode: ListView.StrictlyEnforceRange
引起的。但是我如何避免这种情况?
我尝试了highlightRangeMode: ListView.ApplyRange
,它让我再次滚动到标题,但这导致项目通常不会移至顶部,而这是不可接受的。我尝试了headerPositioning: ListView.PullBackHeader
,但这给了我相同的结果,例如headerPositioning: ListView.PullBackHeader
ListView {
id: list
anchors.fill: parent
clip: true
spacing: 11
focus: true
highlightMoveDuration: 400
snapMode: ListView.SnapToItem
preferredHighlightBegin: 0
preferredHighlightEnd: 100
highlightRangeMode: ListView.StrictlyEnforceRange
headerPositioning: ListView.InlineHeader
header: Rectangle {
id: headerBar
height: 116
color: "blue"
anchors {
left: parent.left
right: parent.right
leftMargin: 12
rightMargin: 12
}
}
model: myModel
delegate: ListItem {
height: 56
width: list.width
color: "red"
onListItemClicked: {
list.currentIndex = index
}
}
}
我希望ListView中的所选项目始终滚动到列表的顶部(在preferredHighlightBegin
和preferredHighlightEnd
内部(,并且我可以手动向下滚动以查看ListView标头。有人知道解决方案吗?
我看不到如何在qml scrollview中进行动画滚动的解决方案?由于我不想使用滚动条。
您只能在单击时应用严格的范围并在之后删除它以允许光滑的鼠标滚动:
ListView {
// ....
highlightRangeMode: ListView.NoHighlightRange
delegate: ListItem {
// ...
onListItemClicked: {
list.highlightRangeMode = ListView.StrictlyEnforceRange
list.currentIndex = index
list.highlightRangeMode = ListView.ApplyRange
}
}
}