PyQt 示例 editabletreemodel.py 在删除最后一行时崩溃

PyQt example editabletreemodel.py crashes when the last row is removed

editabletreemodel.py 示例中(来自 PyQt examples/itemviews 文件夹)我注意到当最后一行被删除(例如,读取“连接编辑模式”或之后的任何其他内容)应用程序崩溃并显示

'IndexError: list index out of range'.

会不会是因为示例在创建索引等时保留了 TreeItem 对象而不是 id?我有非常相似的问题,只是想知道保留 id 而不是对象是否更好?或者像这样检查是否请求超过限制的行是安全的:

def child(self, row):
    if row >= self.childCount():
        return None

    return self.childItems[row]

我使用 Python 版本 2.7.9 和 PyQt 版本“4.9.6”。

提前致谢。

这应该作为 pyqt mailing-list 上的错误报告。

Qt example声明childItems为:

QList<TreeItem*> childItems;

并将 child() 函数定义为:

TreeItem *TreeItem::child(int number)
{
    return childItems.value(number);
}

这不会进行任何明确的边界检查,因为如果 number 超出范围,value() 将简单地 return null。但显然 python 列表的行为方式不同,因此需要进行明确的边界检查:

def child(self, row):
    if 0 <= row < self.childCount():    
        return self.childItems[row]