我根据文档实现了removeRows()
方法。我的数据存储在QList中。删除QAbstractTableModel中的最后一项时出现“索引超出范围”
bool MeasurementManager::removeRows(int row, int count, const QModelIndex &m) {
if(count > 1) {
qDebug() << "MeasurementManager: cannot remove more than one measurement";
return false;
}
beginRemoveRows(QModelIndex(), row, row+count-1);
list.removeAt(row);
endRemoveRows();
return true
}
但是,在执行beginRemoveRows()
当删除最后一个项目,我得到了以下错误消息,当:使用我可以删除的项目就好
ASSERT failure in QList<T>::at: "index out of range"
删除最后一个项目时(导致碰撞),它显然必须在0行,但只要模型中有其他项目,我可以删除行0中的项目,而不会有任何问题。
如果我注释掉这样
beginRemoveRows(QModelIndex(), row, row+count-1);
//list.removeAt(row);
endRemoveRows();
实际去除我的数据不会发生崩溃,所以我的假设是,某事试图访问后取出列表的元素之一。但是,在逐步完成功能时,beginRemoveRows()
方法显然是罪魁祸首。
任何帮助从哪里开始调试,将不胜感激!