crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> comboBox + БД, Как организовать.
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" и связать их, например по порядковому номеру.

Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.8.2010, 22:34
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2890
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Наверное, спасёт вот это
Цитата
void QComboBox::setItemData ( int index, const QVariant & value, int role = Qt::UserRole )
Sets the data role for the item on the given index in the combobox to the specified value.

See also itemData().

:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 21.8.2010, 22:59
Сообщение #3


Студент
*

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

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




Репутация:   0  


Цитата(Алексей1153 @ 21.8.2010, 22:34) *
Наверное, спасёт вот это
Цитата
void QComboBox::setItemData ( int index, const QVariant & value, int role = Qt::UserRole )
Sets the data role for the item on the given index in the combobox to the specified value.

See also itemData().

:)


Вручную заполнить ???
То есть вместо
ui->comboBox->setModel(model);
использовать в цикле:
ui->comboBox->setItemData(...);
???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 22.8.2010, 5:56
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


potkin, скажи, для чего ты используешь QSqlRelationalTableModel?
Цитата(potkin @ 22.8.2010, 2:28) *
Какой то целочисленный массив заполнить полем "postID", а в "comboBox" запихнуть поле "name" и связать их, например по порядковому номеру.
и это не понятно, зачем ещё что-то связывать, если есть таблица в БД в которой уже всё связанно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
potkin
  опции профиля:
сообщение 22.8.2010, 15:07
Сообщение #5


Студент
*

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 22.8.2010, 5:56) *
potkin, скажи, для чего ты используешь QSqlRelationalTableModel?
Цитата(potkin @ 22.8.2010, 2:28) *
Какой то целочисленный массив заполнить полем "postID", а в "comboBox" запихнуть поле "name" и связать их, например по порядковому номеру.
и это не понятно, зачем ещё что-то связывать, если есть таблица в БД в которой уже всё связанно?


Ну так в КомбоБокс я заношу поле "name".
Пользователь выбирает какой-то из Итемов.
Но в конце концов надо получить поле "postID", чтоб занести в БД не поле "name", а его ID-шник.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 5.9.2010, 16:19
Сообщение #6


Участник
**

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

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




Репутация:   0  


может немного кривовато но я решил этот вопрос через QSqlQueryModel и запрос построенный таким образом:
"SELECT DISTINCT ON (postID) name FROM post;" (постгрес отсортирует результат по postID)
обязательное условие это то что postID должен быть autoincrement и номера в таблице должны идти строго по порядку, без разрывов.
postID получать по ui->comboBox->currentIndex()+1

вроде работает)) если кто предложит способ получше, буду рад ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 5.9.2010, 16:27
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2890
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


способ лучше:

"SELECT postID name FROM post;" //поскольку автоинкремент, то есть предполагается уникальный ключ

postID получать из getItemData()

Сообщение отредактировал Алексей1153 - 5.9.2010, 19:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 5.9.2010, 19:27
Сообщение #8


Участник
**

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

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




Репутация:   0  


Алексей1153,
звучит заманчиво.. но что то я не видел метода getItemData().. Это разве QCombobox?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 5.9.2010, 19:45
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2890
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


очепятка ) Просто ItemData()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 5.9.2010, 20:22
Сообщение #10


Участник
**

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

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




Репутация:   0  


Алексей1153,
Для меня почему то это не работает..

привязываю к комбобоксу QSqlQueryModel с таким запросом: "SELECT name, postID FROM post;"
комбо заполняется нормально. остаётся выцепить postID.
Но ui->comboBox->itemData(ui->comboBox->currentIndex()) выдаёт всегда QVariant(, )

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

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


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




RSS Текстовая версия Сейчас: 25.1.2020, 8:26