Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 从qstandarditemmodel数据形成树结构_Qt_Treeview - Fatal编程技术网

Qt 从qstandarditemmodel数据形成树结构

Qt 从qstandarditemmodel数据形成树结构,qt,treeview,Qt,Treeview,我有一个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, <param

我有一个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>
...
type1,item1,
第2类,第2项,
第3类,第3项,
第4类,第4项,
第4类,第5项,
第5类,第6项,
第5类,第7项,
第1类,第8项,
第2类,第9项,
...
在上述数据中,项目2至7属于类型1(即,项目1是项目2至项目7元素的父元素,它们可能属于或可能不属于同一类型)

我的目标是以树形结构的形式显示上述数据。为此,我首先将csv文件中的所有数据提取到QStandarItemModel中。 现在我不确定如何从这里开始,以树的形式显示上面的内容


有人能帮我提供一些关于如何从这里开始的建议吗。

A
QStandardItemModel
与树不匹配,原因很简单,没有QmodelIndex父级。在您的情况下,csv文件中的列表示项目的级别,而行表示路径

您需要在模型中实现数据的“树状”特性。您有3种选择:

  • QAbstractProxyModel
    在您的
    QStandardItemModel
    之上,使用默认的
    QTreeView
    。这是做事情的一般方法(可以用于任何表模型)。它使您能够理解模型索引,而不会干扰到目前为止所做的工作
  • 子类
    QabstractItemModel
    并放弃当前的QStandardItemModel,使用默认的
    QTreeView
    。这是我从一开始就应该做的
  • 创建您自己的
    qabstractemview
    子类以与QStandardItemModel一起使用。这是最常用的MVC方式,但由于Qt视图实际上必须处理渲染细节,因此不建议使用这种方式
  • 选择1。并使用qt示例获得灵感。请参阅以了解如何对模型进行子类化


    编辑:在一个非官方的库中有一个QGroupingProxyModel,它声称完全按照我在第一个选项中提出的方法进行操作

    如何确定item2或item7具有父item1?csv文件的方案不清楚。项目2或项目7属于组类型1。几行之后,再次重复键入1。假设项目1是网络中的一个节点,该项目1下的所有项目都是从其他几个节点发出的链接。这就是为什么我说item1是Item2和item7的父项。csv文件是您提供的吗?是的,如果你使用XML文件会更好,Qt可以自然地处理这个问题。你的意思是试着从这个数据形成一个XML文件并使用XML文件@boiethios吗?如果有一些“静态”数据(我的意思是不会从外部更改),那么最好将其编写为XML格式(这非常适合表示某种树结构)并使用它来构建树小部件。解析CSV文件并构建树将使您在其他方面损失一些时间。