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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QComboBox  (Прочитано 8782 раз)
kadr
Гость
« : Апрель 19, 2012, 07:05 »

Привет всем, подскажите как можно сделать так чтобы при загрузке значений в combobox из базы, показывались одни значения а передавались другие, пример: id->name, то есть показывалось name а передавалось id
Код:
connect(ui->dropList,SIGNAL(currentIndexChanged(int)),SLOT(onChange(int)));
Записан
Bepec
Гость
« Ответ #1 : Апрель 19, 2012, 07:09 »

Эмм... переопределить комбобокс и залить в него структуру для хранения данных?

Возможно есть и стандартные методы, но незнаю.

PS как вариант не переопределяю комбобокс, создать массив с данными data
  • , а потом в слоте передавать data[currentIndex].
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Апрель 19, 2012, 07:29 »

см. QSqlRelationalTableModel.
Записан

Qt 5.11/4.8.7 (X11/Win)
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #3 : Апрель 19, 2012, 08:25 »

Если без использования моделей, то при заполнении комбобокса в каждом индексе запоминать и id.
Код
C++ (Qt)
   QSqlQuery q("select id, name from tablename");
   QComboBox *comboBox = new QComboBox(this);
   while (q.next())
       comboBox->addItem(q.value(1).toString(), q.value(0).toInt());

а в стандартном обработчике сигнала void QComboBox::currentIndexChanged (int index):

Код
C++ (Qt)
int id = comboBox->itemData(index).toInt();
// можно испустить свой сигнал
emit curentIdChanged(id);


   
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
andrew.k
Гость
« Ответ #4 : Апрель 20, 2012, 00:37 »

Kurles предложил простой рабочий вариант.
Посложнее можно использовать модель самого комбобокса и хранить данные в ней.
combo->model()->setData(...);

Но возможно это не даст преимуществ в данном случае (если нужно только id сохранить).
Записан
kadr
Гость
« Ответ #5 : Апрель 20, 2012, 07:18 »

Если без использования моделей, то при заполнении комбобокса в каждом индексе запоминать и id.
Код
C++ (Qt)
   QSqlQuery q("select id, name from tablename");
   QComboBox *comboBox = new QComboBox(this);
   while (q.next())
       comboBox->addItem(q.value(1).toString(), q.value(0).toInt());

а в стандартном обработчике сигнала void QComboBox::currentIndexChanged (int index):

Код
C++ (Qt)
int id = comboBox->itemData(index).toInt();
// можно испустить свой сигнал
emit curentIdChanged(id);


   
Спасибки - этот вариант рабочий и как раз мне подходит.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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