我有一个csv文件,其数据如下:
type1, item1, <parameters of item1>
type2, item2, <parameters of item2>
type3, item3, <parameters of item3>
type4, item4, <parameters of item4>
type4, item5, <parameters of item5>
type5, item6, <parameters of item6>
type5, item7, <parameters of item7>
type1, item8, <parameters of item8>
type2, item9, <parameters of item9>
...
在上面的数据中,第2至7项属于类型1(即,item1是元素item2到item7的父元素,它们可能属于同一类型,也可能不属于同一类型。)
我的目标是以树形结构的形式显示上述数据。为此,我首先将csv文件中的所有数据提取到QStandardItemModel中。 现在我不确定如何从这里开始以便以树的形式显示上述内容。
有人可以帮我提供如何从这里开始的建议。
答案 0 :(得分:1)
由于没有QmodelIndex父级的简单原因,QStandardItemModel
与树不匹配。在您的情况下,csv文件中的列表示项目的级别,而行是路径。
你需要实现&#34;树状&#34;将数据的性质转化为模型。你有3个选择:
QAbstractProxyModel
位于QStandardItemModel
之上,请使用默认的QTreeView
。这是做事的通用方式(可以与任何表模型一起使用)。它允许您理解模型索引,而不会弄乱您迄今为止所做的工作。QabstractItemModel
并抛弃当前的QStandardItemModel,使用默认的QTreeView
。这就是我从一开始就要做的事情。QAbstractItemView
子类以与QStandardItemModel一起使用。这是最MVC的方式,但由于Qt视图实际上必须处理渲染细节,因此不建议这样做。使用选项1.并使用qt示例simple tree model获取灵感。另请参阅my answer on a very similar problematic以了解如何将模型子类化
编辑: 非官方 库QAdvancedItemViews中有一个 QGroupingProxyModel ,它声称完全符合我的第一个建议选项。