在索引中,为什么检查项目是否已有索引? (QT)

时间:2014-12-17 20:53:35

标签: qt pyqt pyside

简短版

为树模型重新实现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()

1 个答案:

答案 0 :(得分:3)

hasIndex函数只执行边界检查。如果rowcolumn参数小于零,或者超出parent索引的行数或列数范围,则返回False;否则,它将返回True

此外,在示例实现中,index方法在hasIndex返回false时不返回根索引:它返回无效索引(无参数) QModelIndex的构造函数总是创建一个无效的索引)。当正在建模的数据中没有可用的对应项时,模型应始终返回无效索引。