【问题标题】:PyQt: QTreeView and QAbstractItemModel in human languagePyQt:人类语言中的 QTreeView 和 QAbstractItemModel
【发布时间】:2014-03-26 21:48:07
【问题描述】:

虽然深入研究 TreeView/Model 概念,但到目前为止我“理解”...

首先我继承 MyTreeView() 类,通过将 QTreeView 内置分配给 MyOwnAbstractItemModel() model (在下一步中进行子类化):

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)

接受四个参数。请指教!非常感谢。

【问题讨论】:

    标签: pyqt qtreeview qabstractitemmodel


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      另外,您应该通读 Qt 文档中的 Model/View Programming overview - 特别是 Model Subclassing reference

      【讨论】:

        猜你喜欢
        • 2016-07-20
        • 2011-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多