2

在深入研究 TreeView/Model 概念的同时,这是我到目前为止“理解”的内容......

首先,我继承了MyTreeView () 类,通过将QTreeView内置分配给MyOwnAbstractItemModel ()模型来扩展它(下一步中的子类化):

class myTreeView(QTreeView):
    def __init__(self, parent=None):
        super(myTreeView, self).__init__(parent)
        self.myOwnAbstractModel = MyOwnAbstractItemModel()
        self.setModel(self.myOwnAbstractModel)

我继续继承/描述MyOwnAbstractItemModel ()。它使用内置的 QAbstractItemModel() 类作为“模板”开始...

class MyOwnAbstractItemModel(QAbstractItemModel):      
    def __init__(self, parent=None):
        super(MyOwnAbstractItemModel, self).__init__(parent)

据我了解,必须声明一些MyOwnAbstractItemModel()方法才能使 MODEL 工作。我想知道在哪里可以获得这些方法()名称及其语法描述的完整列表?

我查看了在线发布的代码示例。看起来那些预定义的方法已经预定义了特定的语法......例如传入参数的数量以及预期的参数类型......例如,下面的方法没有得到任何传入参数(不清楚是什么它的目的):

def mimeTypes(self):
    #print '\n mimeTypes(self)'
    types = QStringList()
    types.append('application/x-ets-qt4-instance')
    return types

但是这个方法:

def dropMimeData(self, mimedata, action, row, column, parentIndex):
    parentNode = self.nodeFromIndex(parentIndex)

接受四个参数。请指教!提前谢谢了。

4

2 回答 2

4

如果你下载PyQt 的源代码contrib/pymodeltest,你会在目录中找到一个模型测试模块。该模块提供了一种方法来检查自定义模型实现中发现的常见错误。您可能会发现查看此模块中的代码很有用,因为它有很多有用的注释来解释它执行的许多测试的目的。

此外,您应该通读 Qt 文档中的模型/视图编程概述- 特别是模型子类化参考

于 2014-02-25T20:12:38.180 回答
2

Qt 文档列出了在文档中子类化 QAbstractItemModel 所需的最少方法。

方法签名被设置为接受某些参数,因为这是与模型交互的类(例如视图)将如何调用它们。您提供的几个示例与实现拖放功能有关。

使用树模型,您可能还希望在节点数据类中实现某些方法,以便您的树节点可以提供有关它们自己、它们的父节点和子节点的信息。你如何做到这一点取决于你。这些节点链接在一起形成树层次结构。

模型/视图的东西一开始可能有点难以理解。我可能会建议先实现您自己的树模型并使用标准QTreeView,然后再探索自定义视图并从那里拖放。PyQt 源提供的 simpletreemodel 示例是一个很好的基本示例。它只实现所需的方法(加上 headerData),并有一个简单的 TreeItem 类作为节点。

于 2014-02-25T06:34:30.900 回答