Интерисует такая ситуация, нужно создать comboBox в котором будут содержаться города к примеру:
москва
питер
новосибирск
....
и привязать к каждому городу уникальное значение. К примеру выбрав из списка москву в значении получить установленное значение:
москва = 123
питер = 345
новосибирск = 678
до этого я делал так
QStringList cities;
cities << "Москва" << "Питер" << "Новосибирск";
ui->comboBox->addItems(cities);
......
Это можно сделать по разному.
Как вариант:
QMap<QString, int> cities;
cities[ "Москва" ] = 123;
cities[ "Питер" ] = 345;
cities[ "Новосибирск" ] = 678;
ui->comboBox->addItems( cities.keys() );
// В слоте по имени получить id
int id = cities[ text ];
Для привязке к строке можно задать пользовательские данные:
void QComboBox::addItem ( const QString & text, const QVariant & userData = QVariant() );
а потом читать их:
QVariant QComboBox::itemData ( int index, int role = Qt::UserRole ) const
см. Справку!
Еще можно воспользоваться setModel(QAbstractItemModel * model) + setModelColumn(int visibleColumn). Удобно при загрузки данных из БД.
QMap<QString, int> cities;
cities[ "Москва" ] = 123;
cities[ "Питер" ] = 345;
cities[ "Новосибирск" ] = 678;
ui->comboBox->addItems( cities.keys() );
// В слоте по имени получить id
int id = cities[ text ];
слот)) у меня же подгрузиться это все при запуске программы, но когда я буду менять город в этом списке, он же должен сигнал отправить моему слоту...
void QComboBox::currentIndexChanged ( const QString & text ) [signal]
В слоте в переменной text получаешь название города и достаешь его id из map.
зачем возится с map'ом если в QComboBox нужная функциональность уже есть
Wlad, правильно сказал, добавляешь:
ui->comboBox->addItem("Москва", QVariant(123));
ui->comboBox->addItem("Питер", QVariant(222));
void MyWidget::on_comboBox_currentIndexChanged(int index) {
int number = ui->comboBox->itemData (index, int role = Qt::UserRole ).toInt();
}
DIMEDROLL, согласен, так проще. И QVariant позволит помещать множество типов в себя.
спасибо за ответы)) выручили)
Вот тоже столкнулся с такой же проблемой неужто нет более элегантного метода!!? типа:
QComboBox *point;
....
QObject::connect(bd,SIGNAL(search_name_end(QStringList)),ui->point,SLOT(update()));
слот "setItems" отсутствует, это только функция.
Возможно ли как нить привести к выше изложенному виду ?
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)