QT5 C++ Как добавить строку в связанную таблицу БД SQLite используя QTableView и QSqlRelationalTableModel

Под QT5.12 C++ пишу приложение в котором используются несколько связанных таблиц SQLite. Таблицы создаются заполняются и отображаются в QTableView с помощью моделей QSqlRelationalTableModel. Данные в записях редактируются, но есть проблема. Когда я пытаюсь добавить новую строку в существующую таблицу БД - приложение падает.

// В MainWindow.h
#include <QMainWindow>
#include <QSqlRelationalTableModel>
#include <QSqlRelationalDelegate>
#include <QSqlRelation>
#include <QTableView>

.....
QSqlRelationalTableModel    *model = nullptr;

QSqlRelationalTableModel    *modelStudyPlansList;
QSqlRelationalTableModel    *modelStudyPlan;

.....

// В MainWindow.cpp

void MainWindow::on_tableView_customContextMenuRequested(const QPoint &pos)
{
    Q_UNUSED(pos);
    QMenu menu(this);
    auto infoA = menu.addAction(tr("Add Row"));
    auto infoH = menu.addAction(tr("Hide Row"));
    auto infoD = menu.addAction(tr("Delete Row"));
    if ((ui->tableViewStudyPlansList->hasFocus()))
    {
        model = modelStudyPlansList;
        iTableIndex = 1;
        connect(infoA, &QAction::triggered, this, [this](){appendTableRow(ui->tableViewStudyPlansList); update(); });
        connect(infoH, &QAction::triggered, this, [this](){ hideTableRow(ui->tableViewStudyPlansList); update(); });
        connect(infoD, &QAction::triggered, this, [this](){ deleteTableRow(ui->tableViewStudyPlansList); update(); });
        menu.exec(QCursor::pos());
    }
    else if ((ui->tableViewStudyPlan->hasFocus()))
    {
        model = modelStudyPlan;
......
}

void MainWindow::appendTableRow(QTableView *p_table)
{
    int row = model->rowCount();   // <--- здесь программа падает
    model->insertRow(row);
    p_table->selectRow(row);
    //p_table->setFocus();
    model->setData(model->index(row, 0), "");
    model->submitAll();
}
......

Я могу добавить строку в таблицу, но она не отображается, пока не перезапустишь приложение, а так, чтобы по правой кнопке мыши из выпадающего меню добавлять и удалять строки в таблице БД - не получается. А если обратится к модели

model->SubmitAll(); 

то падение на этой строке произойдёт, то есть - как только я обращусь к указателю на модель. (указатель не пустой, в нём адрес модели той таблицы - на которой фокус ввода).

Что я делаю не так?


Ответы (0 шт):