Qt QML在添加或删除模型中的项目时通知ListView

时间:2019-06-24 14:17:17

标签: qt listview qml qt5

我的ListView应该始终将其当前活动的项目滚动到preferredHighlightBeginpreferredHighlightEnd之间的顶部。单击某项时可以使用。但是,当将新项目添加到我的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中新添加的项滚动到顶部(在preferredHighlightBeginpreferredHighlightEnd之间)。

1 个答案:

答案 0 :(得分:2)

将此值添加到ListView会在模型中的项目数更改时将当前索引更改为最后一个索引,如果只想在插入时滚动,则可能希望跟踪以前的项目数

onCountChanged: {
    if (count > 0) {
        currentIndex = count - 1;
    }
}

如果新项目可能会插入到模型中的任何位置,则可以使用ListView内的Connections项目直接将其连接,并将其直接连接到{{ 1}}。

QAbstractItemModel

如果您的模型仅发出Connections { target: model onRowsInserted: { currentIndex = first + 1; } } 信号,您可以尝试一下。

dataChanged