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

时间:2015-06-28 22:44:41

标签: python pyqt qtreeview qabstractitemmodel

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

  

'IndexError:列表索引超出范围'。

这可能是因为该示例在创建索引时保留TreeItem对象,而不是ids?我有类似的问题,只是想知道保持ID而不是对象是否更好?或者可以安全地检查是否要求超出限制的行:

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

    return self.childItems[row]

我使用Python版本2.7.9和PyQt版本'4.9.6'。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

原始Qt example并将childItems声明为:

QList<TreeItem*> childItems;

并将child()函数定义为:

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

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

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