Название: QDataWidgetMapper и несколько QCombobox
Отправлено: serzh272 от Январь 21, 2020, 04:28
Здравствуйте! Столкнулся с проблемой - при использовании QDataWidgetMapper в модели QSqlRelationalTableModel для двух комбобоксов в окне диалога в маппере установил QSqlRelationalDelegate. Все работает если при изменении данных меняю значения комбобоксов (либо не меняю, а заново выбираю установленное значение). Но когда открываю диалог и сразу закрываю его, значение одного (акцентирую внимание - одного) комбобокса сбрасывается на первое в списке с обновлением данных в базе. При изменении макета в диалоге, комбобоксы начинают вести себя непредсказуемо - поведение либо меняется на противоположное (при закрытии сбрасывается значение другого комбобокса), либо при закрытии оба значения комбобоксов сбрасывается на первое в списке. Сначала связывал это с тем, что используется один экземпляр делегата для разных комбобоксов, но ведь так он и работает. Использую SQlite. Свойства комбобоксов одинаковые (кроме списков значений), при удалении из кода фрагментов, касающихся одного из комбобоксов ситуация не меняется (первый (comboBox_vid) работает как надо, второй (comboBox_izd) сбрасывается, Фрагмент кода для диалога: #include "documentdialog.h" #include "mainwindow.h" #include "ui_documentdialog.h"
DocumentDialog::DocumentDialog(QWidget *parent) : QDialog(parent), ui(new Ui::DocumentDialog) { ui->setupUi(this); QSqlQuery qDok("SELECT * FROM tbl_vidy_dok"); while (qDok.next()) { ui->comboBox_vid->addItem(qDok.value("VID_DOK").toString()); } QSqlQuery qIzd("SELECT * FROM tbl_izdat"); while (qIzd.next()) { ui->comboBox_izd->addItem(qIzd.value("IZDAT").toString()); } mp = new QDataWidgetMapper(this); model = new QSqlRelationalTableModel(this); model->setTable("tbl_documents"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); model->setJoinMode(QSqlRelationalTableModel::LeftJoin); model->setRelation(1,QSqlRelation("tbl_vidy_dok","ID_VID_DOK","VID_DOK")); model->setRelation(2,QSqlRelation("tbl_izdat","ID_IZDAT","IZDAT")); mp->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); mp->setModel(model); mp->setItemDelegate(new QSqlRelationalDelegate(mp)); mp->addMapping(ui->comboBox_vid, 1); mp->addMapping(ui->lineEdit_vhod,3); mp->addMapping(ui->lineEdit_ish,5); mp->addMapping(ui->comboBox_izd, 2); mp->addMapping(ui->dateEdit_vhod,4); mp->addMapping(ui->dateEdit_ish,6); mp->addMapping(ui->plainTextEdit_rez,7); connect(this,&DocumentDialog::rejected,this,&DocumentDialog::ready); }
void DocumentDialog::setIdDok(int iddok) { idDok = iddok; model->setFilter("ID_DOK = "+ QString::number(iddok)); model->select();
mp->toFirst(); }
void DocumentDialog::setIdMer(int idmer) { idMer = idmer;
}
int DocumentDialog::getIdDok() { return idDok; }
int DocumentDialog::getIdMer() { return idMer; }
DocumentDialog::~DocumentDialog() { delete ui; }
void DocumentDialog::accept() {
}
void DocumentDialog::ready() { QString tst = ui->comboBox_izd->currentText(); QString tst2 = ui->comboBox_vid->currentText(); mp->submit(); tst = ui->comboBox_izd->currentText(); tst2 = ui->comboBox_vid->currentText(); model->submitAll(); model->select(); }
|