我正在使用QAbstractListModel.match()搜索项目的索引(如果模型中存在)。
QModelIndex childIndex = m_DataSourceModel.match(m_DataSourceModel.index(0,0),Qt::UserRole,QVariant::fromValue(messageID),1,Qt::MatchRecursive)[0];
当找不到该项目时,会发生此错误:
ASSERT failure in QList<T>::operator[]: "index out of range", file C:/Qt/5.10.0/mingw53_32/include/QtCore/qlist.h, line 549
该手册说:“返回的列表可能为空。”然后使用QModelIndex.isValid()检查QModelIndex
那么为什么在我无法检查索引之前没有任何匹配项时程序崩溃?
最佳答案
如文档匹配所示,您可以返回一个空列表,因此在访问之前,您必须验证您至少具有必要数量的元素:
QModelIndexList indexes = m_DataSourceModel.match(m_DataSourceModel.index(0, 0),
Qt::UserRole,
QVariant::fromValue(messageID),
1,
Qt::MatchRecursive);
if(!indexes.empty()){
QModelIndex childIndex = indexes.first();
// or QModelIndex childIndex = indexes[0];
}
关于c++ - QAbstractListModel.match()导致ASSERT在QList <T>::operator []中失败: “index out of range”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55674221/