Я использую QTableView в связке с QSortFilterProxyModel, QSqlRelationalTableModel и делегат FlipProxyDelegate (родитель QSqlRelationalDelegate). Изменение или удаление строки в QTableView не отражается в базе данных.
Пробовал использовать QTableView c QSqlRelationalTableModel и QSqlRelationalDelegate результата не дало
Фрагмент кода создания модели:
QSqlRelationalTableModel * tableModel = new QSqlRelationalTableModel;
tableModel->setTable( currentTable );
tableModel->setEditStrategy( QSqlRelationalTableModel::OnManualSubmit );
createRelations( tableModel, currentTable );
filterView->setItemDelegate( new FlipProxyDelegate(tableModel) );
tableModel->select();
sortModel->setSourceModel( tableModel );
filterView->setModel( sortModel );
Подтверждение транзакции:
void InterfaceChanger::submit()
{
FilterTableView *filterView = (FilterTableView*)ui->layout->itemAt(0)->widget();
QSortFilterProxyModel * sortModel = (QSortFilterProxyModel *)filterView->getModel();
QSqlTableModel *model = (QSqlTableModel *)sortModel->sourceModel();
model->database().transaction();
if (model->submitAll())
{
model->database().commit();
model->select();
}
else
{
model->database().rollback();
QMessageBox::critical( nullptr,
"Ошибка",
model->lastError().databaseText());
}
}
Исходный код проекта