crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

potkin
  опции профиля:
сообщение 21.8.2010, 22:28
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 77
Регистрация: 18.6.2010
Пользователь №: 1819

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть таблица "post":
post
[postID] int auto_increment,
[name] text


Надо в "comboBox" отобразить поле "name", делаю так:

 ui->setupUi(this);

    model = new QSqlRelationalTableModel();
    model->setTable("post");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    ui->comboBox->setModel(model);
    ui->comboBox->setModelColumn(model->fieldIndex("name"));


И надо, чтоб при выборе Итема в "comboBox" (поле "name") выбиралося и соответствующее ему значение "postID".
Есть возможности реализовать такое в Qt.
Потому что мне напрашивается только одно решение:
Какой то целочисленный массив заполнить полем "postID", а в "comboBox" запихнуть поле "name" и связать их, например по порядковому номеру.

Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
MoPDoBoPoT
  опции профиля:
сообщение 5.9.2010, 22:43
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Цитата(512es @ 5.9.2010, 17:19) *
обязательное условие это то что postID должен быть autoincrement и номера в таблице должны идти строго по порядку, без разрывов.

Слишком жёсткие ограничения, а то что выделено красным, для многопользовательского режима, выполнимо при определённых настройках сервера (если отключено кэширование значений последовательности).
Мне не понятно, в чём, собственно, загвоздка, ведь в заполненой QSqlQueryModel находится вся необходимая информация (поля "name" и "postID" уже "связаны" номером строки в модели). Таким образом, чтобы узнать postID для данного (выбранного) имени, надо сделать примерно следующее:
...
int row = ui->comboBox->currentIndex();
if (row = -1)
   return;

QModelIndex index = model->index(row, PostIdColumn);
if (!index.isValid())
   return;

if (!index.data().canConvert(QVariant::Int))
   return;

int postID = index.data().toInt();
...

Если хочется более универсального решения, то можно отнаследоваться от QComboBox и реализовать необходимый функционал:
- bool setModel(QAbstractItemModel *model, int idColumn, int visibleColumn)
- int currentId()
- void currentIdChanged(int id) [signal]
- ...

Сообщение отредактировал MoPDoBoPoT - 5.9.2010, 22:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.6.2025, 14:48