如何通过QAbstractModel处理树形数据

2024-10-03 15:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

这里有一些例子解释了模型函数是如何工作的。那很好!但他们都有一个障碍。数据的使用,这是没有描述。医生说:

In a real application, MyModel would have a member called MyData, which serves as the target for all reading and writing operations.

作为一个新手,我当然在寻找一些“MyModel”的例子。我发现了一些基于列表的简单数据机制,比如here或基于格式化文件的非常复杂的setupModelData。更接近实际情况的是Yasin Uludag的教程(参见yasinuludag.com/blog/?p=98),使用自己的项目模型。你知道吗

但是如何处理其他数据结构呢? 我有一个简单的对象,它包含一个字典,我在其中存储指向数据库表和其他东西的数据指针

class ObjDict(dict):
    def __getattr__(self,attr):
        return self[attr]
    def __setattr__(self,attr,value):
        self[attr]=value

我在类StructureItem中使用它作为数据集数据集名称将是Qt.DisplayRole,数据集将是Qt.UserRole。这很管用。你知道吗

class StructureItem(object):
    def __init__(self, name, dataSet, parent=None):
        if SRCDEBUG : print("StructureItem.__init__")
        self._name = dataSet.name
        self._dataSet = dataSet
        self._children = []
        self._parent = parent
        self._structureList = []
        if parent is not None:
            parent.addChild(self)
...

这将在模型中用作self.\u rootNode

class StructureModel(QAbstractItemModel):
    """INPUTS: Node, QObject"""
    dragDropFinished = pyqtSignal()

    def __init__(self, root, parent=None):
        super(StructureModel, self).__init__(parent)
        self._rootNode = root
    ...

它工作正常,直到它来拖放。我在dropMimeData中得到一个错误,因为insert请求一个StructureItem类型,但我只有来自mimeData.setDatatext类型。你知道吗

我的问题是:在我的模型思维(使用字典作为data)中是否有一个普遍的错误,或者如何处理基于字典的数据结构,例如? Qt对MyData成员意味着什么?它不是StructureItem对象吗?你知道吗


Tags: 数据name模型selfnone字典initdef