Я унаследовался от QAbstractItemModel и использую эту модель в TableView в QML.
Я пытаюсь удалить элемент:
bool DownloadListModel::removeDownloadById(const QString &id)
{
DownloadFile* download = getDownloadById(id);
int index = getDownloadIndex(download);
if (download) {
beginRemoveRows(QModelIndex(),index,index);
_downloadsList.removeOne(download);
_downloadsMap.remove(id);
download->deleteLater();
_db->deleteDownload(id);
endRemoveRows();
return true;
}
return false;
}
Это работает, но есть одно но: когда я выбираю в таблице элемент, подсвечивается другой элемент (если удален один, то будет подсвечен элемент непосредственно над выбранным). Поэтому я пытаюсь послать сигнал layoutChanged():
bool DownloadListModel::removeDownloadById(const QString &id)
{
DownloadFile* download = getDownloadById(id);
int index = getDownloadIndex(download);
if (download) {
emit layoutAboutToBeChanged();
beginRemoveRows(QModelIndex(),index,index);
_downloadsList.removeOne(download);
_downloadsMap.remove(id);
download->deleteLater();
_db->deleteDownload(id);
endRemoveRows();
emit layoutChanged();
return true;
}
return false;
}
Теперь оно работает правильно, но медленно. В чем проблема? Как это делать правильно?