Как получить текущее значение QComboBox с моделью с двумя столбцами?
У меня есть QComboBox с QSqlQueryModel в качестве модели. Модель строится на основе базы данных с
SELECT type_id, type FROM types где type_id - это int, а тип-это varchar.
Я установил видимый столбец QComboBox с функцией setModelColumn(1), чтобы видеть фактические типы, а не индексы, но когда значение выбрано, мне нужно получить type_id, и я не знаю, как этого добиться. Я не могу использовать здесь функцию currentIndex(), потому что текущий индекс QComboBox для меня бесполезен.
Я думаю, что правильная функция есть currentData(), но я не могу понять, как получить данные из первого столбца...
3 ответов:
Еще одно "решение". Я придумал следующий обходной путь: Сначала я устанавливаю видимый столбец в
0, извлекаюtype_id, затем возвращаю видимый столбец в1.Я не знаю, насколько правильно это делать, но это работает.ui->comboType->setModelColumn(0); int type_id = ui->comboType->currentText().toInt(); ui->comboType->setModelColumn(1);Редактировать: Наконец, я нашел решение. Мне просто нужно было немного изменитьking_nak -s ответ. Спасибо king_nak !
int row = myComboBox->currentIndex(); QModelIndex idx = myComboBox->model()->index(row, 0); // first column QVariant data = myComboBox->model()->data(idx); int type_id = data.toInt();
Можно использовать метод
currentIndex(). Даже если индекс не имеет смысла для вашего приложения, это строка в базовой модели. Вы можете использовать его для запроса данных оттудаПопробуйте это:
int row = myComboBox->currentIndex(); QModelIndex idx = myComboBox->rootModelIndex().child(row, 0); // first column QVariant data = myComboBox->model()->data(idx); int type_id = data.toInt();
Есть еще один прекрасный способ получить
id, и это использованиеQSqlRecord.Если у нас есть модель (т. е.
mymodel) для combobox, мы можем получитьQSqlRecordдля выбранной строки, а затем поля, необходимые для этой записи.Пример:
QSqlRecord r = mymodel->record(myComboBox->currentIndex()); int type_id = r.value("type_id").toInt();
Comments