如果你是一个Pythonist,有一个存储在QVector<QVector<QString>> data;
(或者一个列表的字符串列表)我应该如何子类QAbstractItemModel
能够显示(只读)这样一个简单的结构在QTreeView
?我想看到这样的事情:简单的2级层次结构子类化QAbstractItemModel
- “组1”
- 数据[0] [0]
- 数据[0] [1]
- “组2 “
- 数据[1] [0]
- 数据[1] [1]
等
从文档,我读,我应该重写index()
,parent()
,rowCount()
,columnCount()
和data()
。为了实现我的目标,这些方法的最简单可能的实现是什么?
为了使可能的答案更具启发性,一个子类QAbstractItemModel
如何不使用内部指针(存储在QModelIndex
es)。我所看到的所有例子都是以树的形式使用底层模型,节点(有指向子节点和父节点的指针),这些节点使用内部指针很容易包装在QAbstractItemModel
中。但是,即使没有树/节点式底层结构,也没有QModelIndex
的内部指针,我们是否可以使用QAbstractItemModel
?我的问题是基于文档说你可以使用内部指针,但我还没有看到没有它的任何示例。
您的数据结构不足以表示2级层次结构。具体而言,顶级字符串没有存储空间 - 即“组1”,“组2”等。在python中,您需要使用如下形式:'[[“group1”,[1,2, 3]],[“group 2”,[1,2,3]],...]'。 – ekhumoro
如果您没有使用内部指针,那么如何将模型索引映射到数据结构中的位置?看起来你需要使用parent()来做一个自下而上的遍历来计算数据结构中的一系列索引,而且这个数据结构必须通过模型的几乎所有方法不断重新计算,这使得它(累计)非常昂贵的操作,所以也许这就是为什么所有的例子都是基于内部指针(这有效缓存了昂贵的查找操作)。 – ekhumoro