Эта функция должна удалить строку из моего QStandardItemModel, прикрепленного к представлению QTable.
void ModManager::delete_Addin(int index)
{
QString addinId;
int i;
addinId = tableModel->item(index,0)->text();
for(i=0;i<modList->size();i++)
{
if(modList->at(i)->Id() == addinId)
{
delete modList->takeAt(i);
break;
}
}
tableModel->removeRow(index);
}
Странно то, что программа вылетает при последней инструкции, tableModel->removeRow(index);
И это не выходит за пределы диапазона, потому что tableModel->item(index,0)
является действительным.
Что бы это могло быть?
код не представляет относительность между modList
а также tableModel
, tableModel->item(index,0)
был действителен до изменения modList
, в то время как tableModel->rowAt(index)
становится недействительным после изменения. Есть несколько возможностей:
Изменение modList
влияет tableModel
, как подразумевает @vahancho. Это можно проверить, закомментировав цикл for или изменив порядок строк. Это может привести к использованию modList
как реальные данные tableModel
Например, вы реализуете пользовательский QTableModel, возвращая modList->at(i)
как QTableModel::Data
и возвращаясь modList->count()
как QTableModel::rowCount()
?
modList
не влияет tableModel
, но на элемент ссылались где-то еще. этого нельзя сказать из кода.
Других решений пока нет …