【问题标题】:How to characterize "pointer" argument to createIndex in PyQt/PySide?如何在 PyQt/PySide 中描述 createIndex 的“指针”参数?
【发布时间】:2014-12-18 04:02:38
【问题描述】:

在 PyQt/PySide 中使用 QtCore.QAbstractItemModel.createIndex(row, col, pointer) 创建索引很常见。 In the PySide documentation这个方法描述如下:

PySide.QtCore.QAbstractItemModel.createIndex(row, column, ptr)

为给定的行和列创建一个模型索引,其内部 指针指针

我的问题是 Python 中的第三个参数是什么意思,因为 Python 实际上并不使用指针?下面是一个典型的使用方法的例子(在这个例子中是一个返回父节点索引的方法,给定子节点的索引):

def parent(self, index):
    childItem = index.internalPointer()
    parentItem = childItem.parent()
    return self.createIndex(parentItem.row(), 0, parentItem)

虽然我们使用internalPointer() 来提取子项,但这不是createIndex() 的第三个输入[编辑:即使是,因为它是python,它不会是指针,原因在下段落]。相反,createIndex() 的第三个输入只是父项(不是指向父项的指针)。所以看起来我根本没有给它一个指针,而只是我在一个名为 internalPointer 的方法的帮助下提取的另一个对象。

createIndex 的第三个输入真的是一个指针吗(根据文档)?或者我们应该把它称为一个项目并消除指针的讨论?


请注意,此问题基于 PySide (documentation for Qt version) 附带的 simpletreemodel 示例。模块simpletreemodel.py位于\PySide\examples\itemviews\simpletreemodel

我在 QtCentre 发布了这个问题的一个版本: http://www.qtcentre.org/threads/59747-Is-third-input-to-createIndex-really-a-pointer

【问题讨论】:

    标签: python qt pyqt pyside


    【解决方案1】:

    不要将名称中的pointer 视为文字“C 指针”。正如docs 中所解释的,它“被模型用来将索引与内部数据结构相关联”。因此,给定QModelIndex,您应该能够将其映射到内部结构。为此,internalPointer 可以是任何可以帮助您做到这一点的东西。这在树模型中尤其必要,因为 rowcolumn 本身无法完全识别层次模型中的项目。

    【讨论】:

    • 是的,internalpointer 看起来很清楚。关于 createIndex,如何处理第三个参数,称为文档中的指针(因为从 C++ 翻译而来)?只是另一个对象,不是吗?我担心的部分是我引用的文档,这似乎有点误导,可能是因为它只是从 C++ 移植而来的。
    • @neuronet:createIndex 的第三个参数 internalPointer
    • Avaris 在我的示例中它通常不是直接internalPointer,而是从调用internalPointer 返回的类派生的东西(就像internalpointer 方法返回的节点的父节点)。
    • 换句话说,该示例设置为index.internalPointer() 将为您提供与index 关联的item。我假设item 是一个自定义类,其中包含parent 等方法,可让您导航数据结构。
    • “指针”这个名字并不出色。但这不是项目。它是您的方法可用于查找项目数据的数据。如果树中的每个位置都有一个“项目”对象,那么使用它作为 internalPointer 是一个合理的想法。但是对于文件系统(例如),您需要对文件进行某种引用。可以是带有路径的文件名(例如)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2010-12-28
    • 2015-12-10
    • 2022-06-10
    • 2011-09-21
    • 2017-05-29
    相关资源
    最近更新 更多