Qt 6.3.2ListView与header和headerPositioning = ListView. overlayheader一起使用。当设置了当前索引并出现选择动画时,所选项目位于标题
之下这是我的代码
<<p>Аctual行为/strong>当点击项目时,它在标题下移动,为什么?如果设置了preferredHighlightBegin
和preferredHighlightEnd
,那么标题和第一项之间将有一个很大的缩进。
当点击项目时,它移动到标题
之后的位置ListView {
id: journalView
Layout.fillHeight: true
Layout.fillWidth: true
clip: true
flickableDirection: Flickable.HorizontalAndVerticalFlick
boundsBehavior: Flickable.StopAtBounds
snapMode: ListView.SnapToItem
//preferredHighlightBegin: 60
//preferredHighlightEnd: 120
highlightRangeMode: ListView.StrictlyEnforceRange
highlightMoveDuration: 500
highlightMoveVelocity: -1
currentIndex: 0
property int selectedIndex: -1
model: _root.model
headerPositioning: ListView.OverlayHeader
header: ItemDelegate {
z: 2
implicitHeight: 60
implicitWidth: 200
background: Rectangle {
border.color: Material.frameColor
color: "#BDBDBD"
}
text: "Header"
}
delegate: ItemDelegate {
property int row: index
implicitHeight: 60
implicitWidth: 200
highlighted: row === journalView.selectedIndex
background: Rectangle {
color: {
if (highlighted) {
return Material.color(Material.LightBlue, Material.Shade100)
}
return "transparent"
}
border.color: Material.frameColor
}
onClicked: {
journalView.selectedIndex = row
journalView.currentIndex = row
}
text: display
}
}
仍然不完美,但非常接近。使用以下设置:
preferredHighlightBegin: 60
preferredHighlightEnd: 60
highlightRangeMode: selectedIndex >= 0 ? ListView.StrictlyEnforceRange :
ListView.ApplyRange
这里唯一不工作的是,你可以滚动到顶部后选择一个项目,然后差距在那里。但我认为,你应该有办法处理这个问题。