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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Заполнение combobox'а из таблицы. Как правильно?  (Прочитано 7810 раз)
smartchecker
Гость
« : Май 17, 2012, 14:33 »

Есть на форме несколько combobox'ов.
Как их правильно заполнять?

Надо ли делать такие извращения по каждому combobox'у?
Код
C++ (Qt)
   formatsModel = new QSqlTableModel(this, QSqlDatabase::database(connectionName));
   formatsModel->setTable("formats");
   formatsModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
   formatsIdx = formatsModel->fieldIndex("id");
   formatsModel->select();
 
   ui->formatComboBox->setModel(formatsModel);
   ui->formatComboBox->setModelColumn(formatsModel->fieldIndex("format"));
 
   formatsMapper = new QDataWidgetMapper(this);
   formatsMapper->setModel(formatsModel);
   formatsMapper->addMapping(ui->formatComboBox, formatsIdx);
 
Или проще
Код
C++ (Qt)
   query = QSqlQuery(QSqlDatabase::database(connectionName));
   query.exec("SELECT `language` FROM langs ORDER BY `id`");
 
   QSqlRecord rec = query.record();
   int langCol = rec.indexOf("language");
   while (query.next()) {
       ui->langComboBox->addItem(query.value(langCol).toString());
   }
 
Основная цель - потом мне нужно в другую таблицу записать соотв. id.
« Последнее редактирование: Май 17, 2012, 14:36 от smartchecker » Записан
VozaMFC
Гость
« Ответ #1 : Май 17, 2012, 15:43 »

Если правильно понял...то я бы использовал бы модель данных - если используемые данные одинаковые.
Или еще так:
Код:
    ... 
    query = QSqlQuery(QSqlDatabase::database(connectionName));
    query.exec("SELECT `language` FROM langs ORDER BY `id`");
 
    QSqlRecord rec = query.record();
    int langCol = rec.indexOf("language");
    while (query.next()) {
        ui->langComboBox1->addItem(query.value(langCol).toString());
        ui->langComboBox2->addItem(query.value(langCol).toString());
        ...
        ui->langComboBoxX->addItem(query.value(langCol).toString());
    }
    ...
Записан
smartchecker
Гость
« Ответ #2 : Май 17, 2012, 15:56 »

Не, в разные combobox'ы идут данные из разных таблиц.

Ситуация стандартная - есть несколько таблиц вида id и набор полей.
И одна таблица, в которую записываются id'хи из этих таблиц.
Делаю форму, в которой есть combobox'ы отображающие значения полей из той кучи таблиц.
После того как юзер выбирает какие-то варианты в combobox'ах и жмёт кнопку Ok.
В сводную таблицу должны прописываться id'хи из соотв. таблиц.

Вопрос в том как это правильно кодить?
Нужно ли для каждого combobox'а делать отдельную модель?
Как потом в сводную таблицу писать нужные значения.

Если бы кто-нибудь показать взрослую апликуху, которая работает с базой вообще было бы идеально.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Май 17, 2012, 16:10 »

Код
C++ (Qt)
query = QSqlQuery(QSqlDatabase::database(connectionName));
query.exec("SELECT  id, language FROM langs ORDER BY id");
 
while (query.next()) {
       ui->langComboBox->addItem(query.value(1).toString(), query.value(0));
}

id для выбранного language получаешь через QComboBox::itemData().
Записан

Qt 5.11/4.8.7 (X11/Win)
smartchecker
Гость
« Ответ #4 : Май 18, 2012, 09:39 »

Пример можно?
Записан
smartchecker
Гость
« Ответ #5 : Май 18, 2012, 09:46 »

Правильно ли я понимаю что будет так:
Код
C++ (Qt)
qDebug() << ui->langComboBox->itemData(ui->langComboBox->currentIndex()).toInt();
 
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Май 18, 2012, 11:12 »

Правильно ли я понимаю что будет так:
Да.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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