简洁版本
我正在尝试显示 aQAbstracctTableModel中的数据QTreeView。当我这样做时,我最终将整个表显示为每个节点的子节点(以及孙节点,等等)。如何显示抽象表模型的树视图?
细节
QAbstractTableModel我正在尝试在a 中显示一些数据QTreeView。在模型-视图教程中,介绍了一个示例后QAbstractTableModel,它看起来就像替换为一样QTableView简单QTreeView:
您可以将上面的示例转换为具有树视图的应用程序。只需将 QTableView 替换为 QTreeView,就会生成一个读/写树。无需对模型进行任何更改。
当我进行此替换时,我最终会显示一棵树,但如果我单击任何图标来展开它(这应该不会执行任何操作,因为没有内置层次结构),Python 会崩溃并显示Python.exe has stopped working. 这个问题之前已经提出过],但没有可行的解决方案。
为了尝试修复此行为,我在子QAbstractTableModel类中重新实现了索引函数(请参阅下面的完整工作示例)。这会导致一种非常不同类型的错误。也就是说,树中的每个节点现在都包含整个表作为数据。无论我点击多少次,整个表格都会显示出来。像这样:

我似乎陷入了某种递归的噩梦中,不知道如何逃脱。下面的相关问题表明我可能必须转到QAbstractItemModel,但上面的教程引用表明不然(其中指出,无需对模型进行任何更改)。
相关问题
完整的工作示例
from PySide import QtGui, QtCore
class Food(object):
def __init__(self, name, shortDescription, note, parent = None):
self.data = (name, shortDescription, note);
self.parentIndex = parent
class FavoritesTableModel(QtCore.QAbstractTableModel):
def __init__(self):
QtCore.QAbstractTableModel.__init__(self)
self.foods = …Run Code Online (Sandbox Code Playgroud)