Как отразить изменение / удаление строки из модели 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());
    }
    
}


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

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

Войти через центр авторизации
Похожие вопросы