Russian Qt Forum

Qt => Базы данных => Тема начата: zaher220 от Сентябрь 11, 2015, 12:06



Название: QDataWidgetMapper + QSqlRelationalTableModel + QComboBox проблема инициализации
Отправлено: zaher220 от Сентябрь 11, 2015, 12:06
Имеется форма редактирования данных, для связи виджетов с конкретными полями используется QDataWidgetMapper. Модель маппера - QSqlRelationalTableModel, модель QComboBox на этой форме - одна из relationModel'ей модели маппера.
Код:
    model2 = new QSqlRelationalTableModel();
    model2->setEditStrategy(QSqlTableModel::OnFieldChange);
    model2->setTable("ProgrammOptions");

    int idVersionFK = model2->fieldIndex("FK_Version");
    model2->setRelation(idVersionFK, QSqlRelation("Version", "idVersion", "Name"));

Заполним данными combobox
Код:
    ui->comboBox->setModel(model2->relationModel(idVersionFK));
    ui->comboBox->setModelColumn(model2->relationModel(idVersionFK)->fieldIndex("Name"));

Ностроим mapper
   
Код:
mapper = new QDataWidgetMapper();
    //mapper->setItemDelegate(new QSqlRelationalDelegate());
    mapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
    mapper->setOrientation(Qt::Horizontal);
    mapper->setModel(model2);

    mapper->addMapping(ui->checkBoxModbus, model2->fieldIndex("EnableModbus"));
    mapper->addMapping(ui->checkBoKIABING3, model2->fieldIndex("EnableKIABING"));
    mapper->addMapping(ui->checkBox3D, model2->fieldIndex("Enable3D"));
    mapper->addMapping(ui->comboBox, model2->fieldIndex("Name"), "currentText");
    mapper->toFirst();

Проблема состоит в том что если я использую
Код:
mapper->addMapping(ui->comboBox, model2->fieldIndex("Name"), "currentText");
то combobox загрузит нужные данные из базе и установится в текущее значение записи. Но при редактировании не обновит модель.
Если поменять третий параметр на currentText
Код:
mapper->addMapping(ui->comboBox, model2->fieldIndex("Name"), "currentText");
то combobox загрузит данные и встанет на перове значение с 0 индексом, при редактировании он обновит модель и сохранит в базу.

Как мне сделать что бы combobox правильно читал текущее значение и передавал изменения в модель.
При написании кода руководствовался примером Books.