QTableView игнорирует первый столбец и строку из модели представления
дела обстоят так - в функцию TableViewModel::populate подаётся массив новых значений QVector<QVector<CellData>> newValues для записи в QVector<QVector<CellData*>*>* TableViewModel::values, из которых модель представления будет вытягивать информацию и отображать в QTableView. Проблема заключается в том, что в QTableView не отображается первая строка и первый столбец, отсчет headerData тоже начинается не с первого, а со второго элемента по строке и столбцу. Важно заметить, что при вызове beginInsertRows(QModelIndex(), -1, idx) вместо beginInsertRows(QModelIndex(), 0, idx) вылезает debug error (что неудивительно, ведь нельзя начинать вставлять ряды с минус первого), но - о чудо! Таблица отображается без всяких проблем с потерянными в случае с beginInsertRows(QModelIndex(), 0, idx) первым рядом и столбцом. Я несколько раз менял структуру данных модели, но такая ошибка у меня впервые, до этого всё работало с beginInsertRows(QModelIndex(), 0, idx), с чем это может быть связано? Прилагаю код TableViewModel::populate.
void TableViewModel::populate(QVector<QVector<CellData>> newValues)
{
QVector<QVector<CellData*>*> temp_values;
for (int i = 0; i < newValues.count(); i++)
{
auto qstrvec = new QVector<CellData*>[newValues.count()];
for (int j = 0; j < newValues.at(0).count(); j++)
{
CellData old_cell = newValues[i][j];
CellData* cell = new CellData(old_cell.getCellSpan());
cell->setFormula(old_cell.getFormula());
cell->setTextColor(old_cell.getTextColor());
cell->setBackgroundColor(old_cell.getBackgroundColor());
cell->setValue(old_cell.getValue());
(*qstrvec).push_back(cell);
}
temp_values.push_back(qstrvec);
}
auto rows = (*this->values).count();
auto columns = (*(*this->values)[0]).count();
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
delete (*(*this->values)[i])[j];
}
delete[](*this->values)[i];
}
int idx = temp_values.count();
this->beginInsertRows(QModelIndex(), 0, idx);
*this->values = temp_values;
this->endInsertRows();
}
Ответы (1 шт):
Ответ был действительно в непоказанном коде. В MainWindow удалял предыдущую модель и не делал после этого tableView->setModel(nullptr), что и вызывало такое странное поведение.