在浏览QML文档时,我发现了这个值得称赞的文档类: ItemSelectionModel
C++ - Class 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
显示所有这个模型的视图和第二个视图,其中我只想显示它的选择.所以我创建了一个ItemSelectionModel
并且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 }
所以我想知道这个组件的目的是什么,它似乎什么都不做.或者,我怎样才能让它做一些有目的的事情呢?
文档确实没有任何帮助.很抱歉,我已经提交了一个错误来修复它.
在QML世界中,它应该履行与QItemSelectionModel
(即保持多个视图的选择状态同步)相同的功能- 实际上,QML中的实现直接实例化,并且调用实际上与QItemSelectionModel
s 相同.
这实际上可能是您遇到麻烦的根源,因为QML的视图不使用QModelIndex
(QItemSelectionModel
需要),而是int index
指模型的行号.要得到一个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) }