我的ListView应该始终将其当前活动的项目滚动到preferredHighlightBegin
和preferredHighlightEnd
之间的顶部。单击某项时可以使用。但是,当将新项目添加到我的AbsctractListModel中时(它不仅可以添加到末尾,还可以添加到中间的任何位置),ListView会显示新项目,但不会滚动到顶部。这很可能是因为未为新添加的项目设置list.currentIndex = index
。我想设置它,但尚未找到一种方法。有人提示吗?
我尝试了诸如onCurrentItemChanged
之类的不同信号,但仍未找到合适的信号,这也给了我正确的索引。
ListView {
id: list
anchors.fill: parent
clip: true
spacing: 11
focus: true
highlightMoveDuration: 400
snapMode: ListView.SnapToItem
preferredHighlightBegin: 0
preferredHighlightEnd: 100
highlightRangeMode: ListView.StrictlyEnforceRange
model: myAbstractListModel
delegate: ListItem {
height: 56
width: list.width
color: "red"
onListItemClicked: {
list.currentIndex = index
}
}
}
预期结果将是一个ListView,该列表将以编程方式将我的AbstractListModel中新添加的项滚动到顶部(在preferredHighlightBegin
和preferredHighlightEnd
之间)。
答案 0 :(得分:2)
将此值添加到ListView
会在模型中的项目数更改时将当前索引更改为最后一个索引,如果只想在插入时滚动,则可能希望跟踪以前的项目数
onCountChanged: {
if (count > 0) {
currentIndex = count - 1;
}
}
如果新项目可能会插入到模型中的任何位置,则可以使用ListView
内的Connections项目直接将其连接,并将其直接连接到{{ 1}}。
QAbstractItemModel
如果您的模型仅发出Connections {
target: model
onRowsInserted: {
currentIndex = first + 1;
}
}
信号,您可以尝试一下。
dataChanged