Как отразить изменение / удаление строки из модели QSqlRelationTableModel в БД SQLite?

Я использую 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());
    }
    
}


Исходный код проекта
  • Вопрос задан
  • 250 просмотров
Решения вопроса 1
@Mark194 Автор вопроса
Не установил primary key для таблиц, содержащих внешние ключи
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы