Как получить текущее значение QComboBox с моделью с двумя столбцами?



У меня есть QComboBox с QSqlQueryModel в качестве модели. Модель строится на основе базы данных с
SELECT type_id, type FROM types где type_id - это int, а тип-это varchar.



Я установил видимый столбец QComboBox с функцией setModelColumn(1), чтобы видеть фактические типы, а не индексы, но когда значение выбрано, мне нужно получить type_id, и я не знаю, как этого добиться. Я не могу использовать здесь функцию currentIndex(), потому что текущий индекс QComboBox для меня бесполезен.



Я думаю, что правильная функция есть currentData(), но я не могу понять, как получить данные из первого столбца...

687   3  

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

    Ничего не найдено.