简单的2级层次结构子类化QAbstractItemModel

时间:2016-02-26 09:59:44

标签: qt pyqt pyside

将数据存储在QVector<QVector<QString>> data;中(或者如果你是Python教徒的话,或者是字符串列表的列表)我应该如何将QAbstractItemModel子类化以便能够显示(只读)这么简单QTreeView中的结构?我想看到这样的事情:

  • “第1组”
    • 数据[0] [0]
    • 数据[0] [1]
  • “第2组”
    • 数据[1] [0]
    • 数据[1] [1]

从文档中,我读到我应该覆盖index()parent()rowCount()columnCount()data()。为实现我的目标,这些方法最简单的实现是什么?

为了使可能的答案更具启发性,如何在不使用内部指针(存储在QAbstractItemModel es)的情况下创建一个子类QModelIndex。我见过的所有示例都以树的形式使用底层模型,其中包含节点(具有指向其子节点和父节点的指针),使用内部指针可以很容易地将其包含在QAbstractItemModel内。但是,即使没有类似树/节点的底层结构且没有QAbstractItemModel的内部指针,我们是否可以使用QModelIndex?我的问题是基于文档说你可以使用内部指针,但我还没有看到任何没有它的例子。

1 个答案:

答案 0 :(得分:0)

使用哪种级别的层次结构并不重要,创建自定义类节点 使用QVector(通常QList&lt; QString&gt; QList类似于std :: deque)来存储数据,并且指向其子节点QList&lt; Node *&gt;儿童。最高级别的层次结构是不可见的根节点。然后在模型中处理数据。

非常棒的指南,有节点和模型示例:

http://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html

您基本上可以复制粘贴代码并实现自己的setupModelData方法。