Russian Qt Forum

Qt => Общие вопросы => Тема начата: kadr от Апрель 19, 2012, 07:05



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


Название: Re: QComboBox
Отправлено: Bepec от Апрель 19, 2012, 07:09
Эмм... переопределить комбобокс и залить в него структуру для хранения данных?

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

PS как вариант не переопределяю комбобокс, создать массив с данными data
  • , а потом в слоте передавать data[currentIndex].


Название: Re: QComboBox
Отправлено: GreatSnake от Апрель 19, 2012, 07:29
см. QSqlRelationalTableModel (http://doc.crossplatform.ru/qt/4.7.x/qsqlrelationaltablemodel.html).


Название: Re: QComboBox
Отправлено: Kurles от Апрель 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);


   


Название: Re: QComboBox
Отправлено: andrew.k от Апрель 20, 2012, 00:37
Kurles предложил простой рабочий вариант.
Посложнее можно использовать модель самого комбобокса и хранить данные в ней.
combo->model()->setData(...);

Но возможно это не даст преимуществ в данном случае (если нужно только id сохранить).


Название: Re: QComboBox
Отправлено: kadr от Апрель 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);


   
Спасибки - этот вариант рабочий и как раз мне подходит.