Russian Qt Forum
Май 24, 2024, 01:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDataWidgetMapper + QSqlRelationalTableModel + QComboBox проблема инициализации  (Прочитано 2080 раз)
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.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.04 секунд. Запросов: 18.