QAbstractListModel.match () вызывает сбой ASSERT в QList <T>:: operator []: «индекс вне диапазона» - PullRequest
1 голос
/ 14 апреля 2019

Я ищу индекс предмета (если он существует в модели) с помощью 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 должен быть проверен с помощью QModelIndex.isValid ()

Так почему же происходит сбой программы, когда ничто не совпадает, прежде чем я могу проверить индекс?

1 Ответ

2 голосов
/ 14 апреля 2019

Как видно из совпадения документов, вы можете вернуть пустой список, поэтому перед доступом убедитесь, что у вас есть хотя бы необходимое количество элементов:

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];
}
...