Ранее я писал про извращения с наследником QTableView, теперь будем делать это каноничнее.
Итак, есть большая БД, на 100 килострок минимум. Какая БД неважно, FireBird, SQLite и т.п.
Первое, что надо сделать это определить модель.
class QueryModel : public QAbstractTableModel
и определить в ней rowCount(). rowCount() определяется так:
"SELECT COUNT(ID) FROM TABLE"
Затем в классе определяем экземпляр QSqlQuery query_, которому говорим SELECT * FROM TABLE, условно.
Далее определяем data()
QVariant QueryModel::data(const QModelIndex & index, int role) const
{
if (role == Qt::DisplayRole)
{
if (query_->seek(index.row()))
{
const QSqlRecord & rec = query_->record();
QVariant val = rec.value(index.column());
QString str = val.toString();
return str;
}
}
}
Всё. Этого достаточно чтобы иметь нормально прокручиваемую таблицу.
Небольшое дополнение, не нужно вызывать функции resizeColumnsToContents() и resizeRowsToContents(), это вызовет метод data() для всех строк и получите тормоза.