@Zaher220
Software developer

QDataWidgetMapper не устанавливает текущее значение QCombobox?

Здравствуйте.
Столкнулся проблемой при попытке использовать combobox для редактирования поля таблицы(ProgrammOptions). Содержимое combobox загружается из 2 таблицы(Version). Таблицы связываются по внешнему ключу FK_Version в ProgrammOptions.
Суть проблемы: поля таблицы Version загружаются в combobox и редактируются, но после загрузки combobox установлен в самое первое значение в списке, какой бы не был выбран до этого.

//Заполняю модель
model2 = new QSqlRelationalTableModel();
model2->setEditStrategy(QSqlTableModel::OnFieldChange);
model2->setTable("ProgrammOptions"); /*Первая таблица*/
int idVersionFK = model2->fieldIndex("FK_Version"); /*Внешний ключ*/
model2->setRelation(idVersionFK, QSqlRelation("Version", "idVersion", "Name")); /*Устанавливаем связь со второй таблицей */

if ( !model2->select() ){
        qDebug()<<"No";
}
//Заполняю combobox данными из модели и говорю что показывать нужно колонку Name
ui->comboBox->setModel(model2->relationModel(idVersionFK));
ui->comboBox->setModelColumn(model2->relationModel(idVersionFK)->fieldIndex("Name"));

//Создаю маппер.
mapper = new QDataWidgetMapper();
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"), "currentIndex"); /* Привязываемся по свойству currentIndex*/
mapper->toFirst();

Верхняя таблица это Version
Нижняя таблица ProgrammOptions
1dcda7cacb264fcda3f64bf4a58e5e5c.png
  • Вопрос задан
  • 1316 просмотров
Решения вопроса 1
@Zaher220 Автор вопроса
Software developer
Рабочий вариант найден.
mapper->addMapping(ui->comboBox, model2->fieldIndex("Name"));
К сожалению пока нет понимания того почему привязка по индексу не работает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы