Есть две таблицы: этапы и жидкости. В таблице 'Этапы' есть поле которое указывает на жидкость из таблицы "Жидкости". В QComboBox отображаются все жидкости из таблицы "Жидкости" использую отношение между таблицами. Как сделать так чтобы при изменении названии в жидкости в таблице "Жидкости" через QTableView эти изменения были видны в QComboBox?
Вот код создания модели таблицы "Жидкости" и связанной модели таблицы 'Этапы':
liquidModel = new QSqlTableModel;
liquidModel->setEditStrategy(QSqlTableModel::OnFieldChange);
liquidModel->setTable("Liquid"); //таблица Жидкости
liquidModel->select();
QSqlRelationalTableModel *stageModel;//этапы
stageModel = new QSqlRelationalTableModel(0);
stageModel->setEditStrategy(QSqlTableModel::OnFieldChange);
stageModel->setTable("Stage");
int liquidId_in_stageModel=stageModel->fieldIndex("idLiquid_FK");
//установка отношений между связанными таблицами
stageModel->setRelation(liquidId_in_stageModel, QSqlRelation("Liquid", "id", "Name"));
stageModel->setRelation(stageModel->fieldIndex("idProject_FK"), QSqlRelation("Project", "id", "id"));
stageModel->select();
Вот код отображения таблицы Жидкости:
ui.tableView_liquids->setModel(liquidModel);
ui.tableView_liquids->setColumnHidden(liquidModel->fieldIndex("id"), true);
ui.tableView_liquids->horizontalHeader()->hide();
ui.tableView_liquids->verticalHeader()->hide();
ui.tableView_liquids->resizeRowsToContents();
ui.tableView_liquids->resizeColumnsToContents();
QDataWidgetMapper *mapperLiquid = new QDataWidgetMapper(this);
mapperLiquid->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
mapperLiquid->setModel(liquidModel);
mapperLiquid->addMapping(ui.lineEdit_liquidName, liquidModel->fieldIndex("Name"));
connect(ui.tableView_liquids->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
mapperLiquid, SLOT(setCurrentModelIndex(QModelIndex)));
ui.tableView_liquids->setCurrentIndex(liquidModel->index(0, 0));
Вот код отображения таблицы Этапы:
ui.listView_stages->setModel(stageModel);
ui.listView_stages->setModelColumn(stageModel->fieldIndex("Name"));
ui.tableViewStage->setModel(stageModel);
ui.comboBox_liquid_names->setModel(stageModel->relationModel(liquidId_in_stageModel)); ui.comboBox_liquid_names->setModelColumn(stageModel->relationModel(liquidId_in_stageModel)->fieldIndex("name"));
QDataWidgetMapper *mapperStage = new QDataWidgetMapper(this);
mapperStage->setModel(stageModel);
mapperStage->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
mapperStage->setItemDelegate(new QSqlRelationalDelegate(mapperStage));
mapperStage->addMapping(ui.lineEdit_stage_name, stageModel->fieldIndex("Name"));
mapperStage->addMapping(ui.comboBox_liquid_names, liquidId_in_stageModel);
connect(ui.listView_stages->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
mapperStage, SLOT(setCurrentModelIndex(QModelIndex)));