如何描述PyQt/PySide中createIndex的"指针"参数?

2 投票
1 回答
1739 浏览
提问于 2025-04-18 13:25

在使用PyQt/PySide时,创建索引是很常见的,通常用到的方法是QtCore.QAbstractItemModel.createIndex(row, col, pointer)。在PySide的文档中,这个方法的描述如下:

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

为给定的行和列创建一个模型索引,并使用内部指针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自带的simpletreemodel示例(Qt版本的文档)。模块simpletreemodel.py位于\PySide\examples\itemviews\simpletreemodel

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

1 个回答

2

别把名字里的pointer当成字面上的“C语言指针”。在文档中解释说,它是“模型用来将索引与内部数据结构关联起来的”。所以,给定一个QModelIndex,你应该能够把它映射到内部结构上。为了这个目的,internalPointer可以是任何有助于你做到这一点的东西。在树形模型中,这一点尤其重要,因为单靠rowcolumn无法完全识别层次模型中的一个项目。

撰写回答