虽然深入了解TreeView / Model概念,但到目前为止我“理解”了......
首先,我将 MyTreeView ()类子类化,然后通过将分配给 MyOwnAbstractItemModel ()模型扩展 QTreeView 内置(下一步的子类化):
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)
有四个参数。请指教!非常感谢提前。
答案 0 :(得分:4)
如果您下载source code for PyQt,您将在contrib/pymodeltest
目录中找到模型测试模块。此模块提供了一种检查自定义模型实现中常见错误的方法。您可能会发现查看此模块中的代码很有用,因为它有很多有用的注释,可以解释它执行的许多测试的目的。
另外,您应该仔细阅读Qt文档中的Model/View Programming overview - 特别是Model Subclassing reference。
答案 1 :(得分:2)
Qt文档列出了在the docs中继承QAbstractItemModel所需的最小方法。
方法签名被设置为接受某些参数,因为这是与模型交互的类(例如视图)将调用它们的方式。您提供的几个示例与实现拖放功能有关。
使用树模型,您可能还希望在节点数据类中实现某些方法,以便树节点可以提供有关其自身,父节点和子节点的信息。你如何做到这一点取决于你。这些节点链接在一起形成树层次结构。
模型/视图的东西最初可能有点困难。我可能会建议您首先实现自己的树模型并使用标准QTreeView,然后从那里探索自定义视图并进行拖放。随PyQt源提供的simpletreemodel示例是一个很好的简单例子。它只实现了所需的方法(加上headerData),并且有一个简单的TreeItem类作为节点。