Всем доброго времени суток!
Возникла проблема с отображением большого количества строк в QAbstractTableModel.
Прорисовка графики начинает подвисать, когда количество строк в таблице в районе 1500.
Данные берутся из std::unordered_map и затем заполняется std::vector<std::pair<KEY, TYPE>> v и закидывается в модель.
В модели переопределил методы data, flags, rows, columns.
Есть метод upDate(), так как когда вычитываем свежую порцию данных ,то хотим их обновить в модели(например по таймеру 500ms)
C++ (Qt)
TableModel::TableModel(std::vector<std::pair<uint32_t, uint32_t>> *v_ , QObject *parent)
: QAbstractTableModel(parent)
{
v = v_;
}
void TableModel::upDate()
{
beginResetModel();
endResetModel();
}
QVariant TableModel::data(const QModelIndex &index, int role) const
{
if(!index.isValid() || v->size() == 0){
return QVariant();
}else{
switch(role){
case Qt::DisplayRole: {
switch(index.column()){
case 0 :{
return v->at(index.row()).first;
}
case 1:{
return v->at(index.row()).second;
}
default:
return QVariant();
}
}
case Qt::TextAlignmentRole:{
return Qt::AlignCenter;
}
case Qt::FontRole: {
QFont f;
f.setFamily("monospace");
f.setStyleHint(QFont::Monospace);
return f;
}
default:
return QVariant();
}
}
}
Хотелось бы узнать насколько корректны мои действия в плане обновления данных модели?
Нужно ли именно все данные подгружать в модель? Хочется подгружать именно ту область данных, которая на данный момент отображается на view))
Может есть другие механизмы более правильные?
Может мне стоит использовать canFetchMore, fetchMore?
Не получится ли при этом что добавлю в модель все 1500 строк и опять также графика вновь будет подвисать?
Спасибо!