Модель только для чтения из SQL-запроса
QSqlQueryModel связывает результат произвольного SQL-запроса с представлением Qt. Это удобно для отчётов и сложных выборок, когда редактирование напрямую через таблицу не требуется.
auto *model = new QSqlQueryModel(this);
model->setQuery(
"SELECT name, created_at FROM projects ORDER BY created_at DESC",
database);
if (model->lastError().isValid()) {
qWarning() << model->lastError().text();
}
model->setHeaderData(0, Qt::Horizontal, "Проект");
model->setHeaderData(1, Qt::Horizontal, "Создан");
ui->tableView->setModel(model);Проверяйте lastError() после выполнения запроса, особенно при динамическом SQL и изменениях схемы. Для значений от пользователя применяйте подготовленный QSqlQuery с параметрами, а не склеивайте строку запроса.
Когда нужна редактируемая таблица
QSqlQueryModel не предназначена для редактирования результата. Для простой таблицы базы данных рассмотрите QSqlTableModel, а для связанных таблиц — QSqlRelationalTableModel. Если же запрос объединяет таблицы или вычисляет агрегаты, оставьте его в режиме чтения и отдельно реализуйте команду изменения данных с проверкой результата.