gpt4 book ai didi

c++ - 更新模型时 QML ListView 默认行为

转载 作者:行者123 更新时间:2023-11-30 03:15:55 25 4
gpt4 key购买 nike

我有以下 ListView,当使用 C++ 端的 setStringList 更新 QStringListModel 时,它始终显示列表的开头。

例如,用户可以在 View 中上下滚动,当模型更新时, View 回到列表的开头。

如何禁用此行为?

我还需要 View 一次准确显示 X 个项目(在我的示例中为 2 个)。 View 本身不可滚动 (interactive: false),但用户可以通过在 UI 中的某处上下单击 Button 来导航列表。

有合适的方法吗? (关注 Is it possible to show only certain indexes of a QML listview?)

编辑:我已经为“上/下”问题添加了 2 个函数,它似乎按预期工作,但我仍然很想知道是否有更好的方法。

谢谢。

        ListView {
id: view
anchors.top = parent.top
anchors.left = parent.left
readonly property int visibleItems: 2
readonly property int itemHeight: 20
height: visibleItems * itemHeight
width: 100
clip: true

model: listModel // a QStringListModel

delegate: Rectangle {
border.width: 1
border.color: "black"
height: view.itemHeight
width: 100
Text { text: model.display }
}

interactive: false

function up() {
var currentTopIndex = indexAt(view.width / 2, contentY)

if (currentTopIndex !== -1) {

var newTopIndex = currentTopIndex - view.visibleItems

if (newTopIndex >= 0)
view.positionViewAtIndex(newTopIndex, ListView.Beginning)
}
}

function down() {
var currentTopIndex = indexAt(view.width / 2, contentY)

if (currentTopIndex !== -1) {

var newTopIndex = currentTopIndex + view.visibleItems

if (newTopIndex < view.count)
view.positionViewAtIndex(newTopIndex, ListView.Beginning)
}
}

最佳答案

将此添加到您的 ListView 中,只要模型数据发生更改,您就会重置 contentY 属性。这里我假设 contentX 没有改变。

property real previousContentY

Connections {
target: model
onModelAboutToBeReset: view.previousContentY = view.contentY
onModelReset: view.contentY = view.previousContentY
}

如果您只想显示某些项目,您可能还想添加 snapMode: ListView.SnapToItem

关于c++ - 更新模型时 QML ListView 默认行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56671191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com