QT — сбой QTableView removeRow ()

Эта функция должна удалить строку из моего 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) является действительным.
Что бы это могло быть?

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, но на элемент ссылались где-то еще. этого нельзя сказать из кода.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]