gpt4 book ai didi

qt - QML 中 ItemSelectionModel 的目的和用法

转载 作者:行者123 更新时间:2023-12-02 20:51:51 33 4
gpt4 key购买 nike

在浏览 QML 文档时,我发现了这个值得称赞的文档类:ItemSelectionModel

有 C++ 类 QItemSelectionModel其中提供了有关跟踪模型中项目选择的目的的更多详细信息。

但是在 QML 方面,我对如何使用它没有任何线索。

可以说,我有这个 ListModel

ListModel {
id: lm
ListElement { value: 0 }
ListElement { value: 0 }
ListElement { value: 0 }
ListElement { value: 0 }
ListElement { value: 1 }
ListElement { value: 1 }
ListElement { value: 2 }
ListElement { value: 2 }
ListElement { value: 0 }
ListElement { value: 0 }
ListElement { value: 2 }
ListElement { value: 2 }
}

现在我有一个View,在其中显示该模型的所有内容,以及第二个 View ,在其中我只想显示其中的一部分。因此,我创建了一个 ItemSelectionModel 并从第一个 View 的委托(delegate)中调用了它的 select 方法,这似乎根本没有效果。甚至连 hasSelection 属性也懒得去改变。

Repeater {
model: lm
delegate: Rectangle {
property int row: Math.floor(index / 4)
property int column: index % 4
width: 100
height: 100
x: 100 * column
y: 100 * row
border.color: 'black'

MouseArea {
anchors.fill: parent
onClicked: {
ism.select(index, ItemSelectionModel.Select | ItemSelectionModel.Current)
console.log(ism.hasSelection)
}
}
}
}

ItemSelectionModel {
id: ism
model: lm
}

所以我想知道这个组件的目的是什么,它似乎什么也没做。或者,我怎样才能让它做一些有目的的事情?

最佳答案

文档确实一点帮助都没有。抱歉,我已经 filed a bug来研究修复它。

在 QML 世界中,它应该实现与 QItemSelectionModel 相同的功能(即保持多个 View 的选择状态同步)——事实上,QML 中的实现是直接实例化和调用实际上与QItemSelectionModel的相同。

这实际上可能是您麻烦的根源,因为 QML 的 View 不使用 QModelIndex (QItemSelectionModel 需要),而是使用 int 索引 指模型的行号。要获取 QModelIndex,您可以调用 QAbstractItemModel::index,如下所示:

onClicked: {
// note: lm here is the id of your ListModel
ism.select(lm.index(index, 0), ItemSelectionModel.Select | ItemSelectionModel.Current)
console.log(ism.selectedIndexes)
console.log(ism.hasSelection)
}

关于qt - QML 中 ItemSelectionModel 的目的和用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41566115/

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