Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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/5/fortran/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 简单的二级层次子类化QabstracteModel_Qt_Pyqt_Pyside - Fatal编程技术网

Qt 简单的二级层次子类化QabstracteModel

Qt 简单的二级层次子类化QabstracteModel,qt,pyqt,pyside,Qt,Pyqt,Pyside,具有存储在QVector数据中的数据(或者,如果您是Pythonist,可以选择字符串列表)我应该如何子类化qabstractemmodel,以便能够在QTreeView中显示(只读)这样一个简单的结构?我希望看到这样的情况: “第一组” 资料[0][0] 数据[0][1] “第2组” 资料[1][0] 资料[1][1] 等等 从文档中,我读到我应该重写index(),parent(),rowCount(),columnCount()和数据()。为了实现我的目标,这些方法的最简单实现

具有存储在
QVector数据中的数据
(或者,如果您是Pythonist,可以选择字符串列表)我应该如何子类化
qabstractemmodel
,以便能够在
QTreeView
中显示(只读)这样一个简单的结构?我希望看到这样的情况:

  • “第一组”
    • 资料[0][0]
    • 数据[0][1]
  • “第2组”
    • 资料[1][0]
    • 资料[1][1]
等等

从文档中,我读到我应该重写
index()
parent()
rowCount()
columnCount()
数据()。为了实现我的目标,这些方法的最简单实现是什么


为了使可能的答案更具启发性,一个子类
qabstractemmodel
如何不使用内部指针(存储在
QModelIndex
es中)。我所看到的所有示例都以树的形式使用底层模型,其中包含节点(具有指向其子节点和父节点的指针),这使得使用内部指针在
qabstractemmodel
中很容易包装。但是,即使没有树/节点式的底层结构和
QModelIndex
的内部指针,我们也可以使用
qabstractemodel
?我的问题是基于文档说你可以使用内部指针,但是我还没有看到没有内部指针的例子。

你使用哪一层层次结构并不重要,创建自定义类节点 使用QVector(通常QList QList类似于std::deque)存储数据,并将指针指向其子节点QList子节点。层次结构的顶层是不可见的根节点。然后处理模型中的数据

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


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

使用哪一层次结构并不重要,创建自定义类节点 使用QVector(通常QList QList类似于std::deque)存储数据,并将指针指向其子节点QList子节点。层次结构的顶层是不可见的根节点。然后处理模型中的数据

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


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

您的数据结构不足以表示2级层次结构。具体地说,顶级字符串没有存储空间,即“group1”、“group2”等。用python术语来说,您需要这样的东西:
[[“group1”、[1,2,3]]、[“group2”、[1,2,3]]、…]
。如果不使用内部指针,如何将模型索引映射到数据结构中的某个位置?看起来需要使用
parent()进行自底向上的遍历
将索引链计算到数据结构中。几乎模型的每一种方法都必须不断地重新计算索引链,使其成为(累积)非常昂贵的操作。因此,可能这就是为什么所有示例都基于内部指针(有效地缓存昂贵的查找操作)。您的数据结构不足以表示2级层次结构。具体而言,顶级字符串没有存储空间,即“组1”、“组2”等。在python术语中,您需要类似以下内容:
[[“组1”、[1,2,3]]、[“组2”、[1,2,3]]、…]
。如果不使用内部指针,如何将模型索引映射到数据结构中的某个位置?看起来您需要使用
parent()
进行自下而上的遍历,以计算数据结构中的索引链。几乎每一种模型方法都必须不断地重新计算,这使得(累积地)这是一个非常昂贵的操作。因此,也许这就是为什么所有示例都基于内部指针(有效地缓存昂贵的查找操作)。