简短版
为树模型重新实现index
时,为什么我们首先检查相关项是否已经有索引(hasIndex
),如果不是则返回根索引?是不是要为该项目创建索引?
详细版本
考虑在PySide的simpletreemodel示例中重新实现index
(完整代码如下)。我的理解是index
方法用于获取特定项的行,列和父索引,并使用createIndex
返回该项的索引。但是index
方法打开时带有以下几行:
if not self.hasIndex(row, column, parent):
return QtCore.QModelIndex()
我在这里有点困惑。如果项目已经有效索引,为什么要返回根索引?这个方法如何创建索引?当我删除上面的行时,我发现应用程序中没有任何有害影响。
由于我试图尽可能简化PySide示例,我想删除这两行。这会产生不可预见的后果吗?
相关代码
def index(self, row, column, parent):
if not self.hasIndex(row, column, parent):
return QtCore.QModelIndex()
if not parent.isValid():
parentItem = self.rootItem
else:
parentItem = parent.internalPointer()
childItem = parentItem.child(row)
if childItem:
return self.createIndex(row, column, childItem)
else:
return QtCore.QModelIndex()
答案 0 :(得分:3)
hasIndex
函数只执行边界检查。如果row
或column
参数小于零,或者超出parent
索引的行数或列数范围,则返回False
;否则,它将返回True
。
此外,在示例实现中,index
方法在hasIndex
返回false时不返回根索引:它返回无效索引(无参数) QModelIndex的构造函数总是创建一个无效的索引)。当正在建模的数据中没有可用的对应项时,模型应始终返回无效索引。