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();
то падение на этой строке произойдёт, то есть - как только я обращусь к указателю на модель. (указатель не пустой, в нём адрес модели той таблицы - на которой фокус ввода).
Что я делаю не так?