Код:
void Model::update(std::vector<Type> &fresh)
{
int prvsz = store.size();
int cursz = fresh.size();
beginInsertRows(QModelIndex(), prvsz, cursz);
store.swap(fresh);
endInsertRows();
}
это кстати будет работать только если в новом векторе рядов больше чем в старом
Да, согласен)
Сделал вот так
Код
C++ (Qt)
void Model::upDate(std::vector<typedata> &fresh, QTreeview *view)
{
int prvsz = v.size();
int cursz = fresh.size();
int count = cursz - prvsz;
if (count>0) {
beginInsertRows(QModelIndex(), prvsz, cursz - 1);
v.swap(fresh);
endInsertRows();
}
else if(count==0){
QRect viewportRect = view->viewport()->rect();
QModelIndex topLeft = view->indexAt(viewportRect.topLeft());
QModelIndex bottomRight = view->indexAt(viewportRect.bottomRight());
if(topLeft.isValid() && bottomRight.isValid()){
dataChanged(topLeft,bottomRight);
}
}
else {
beginInsertRows(QModelIndex(), cursz , prvsz - 1);
v.swap(fresh);
endInsertRows();
}
}