Russian Qt Forum
Ноябрь 23, 2024, 15:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Попытка преобразования QComboBox  (Прочитано 8045 раз)
linuxoid
Гость
« : Август 15, 2007, 08:09 »

Люди добрые подскажите как переделать QComboBox чтобы в нём в одном поле могло содержаться два значения(для моего случая нужно чтобы из таблицы показывалось в одном поле id_key_city и city_name - они связаны :?:
Записан
SABROG
Гость
« Ответ #1 : Август 15, 2007, 08:19 »

Запихнуть QPair в Qt::UserRole для каждого итема комбика.
Или Qt::UserRole - id_key_city, в Qt::UserRole+1 - city_name и т.д. Или ты хочешь разделить lineEdit кобмика на две части, типа кнопка комбика одна, а поля ввода 2 ?
Записан
linuxoid
Гость
« Ответ #2 : Август 15, 2007, 08:46 »

нужно стелать так чтобы поле комбика содержало id_key_city и city_name(для city_name   id_key_city это ид номер) из таблицы,а вообще id_key_city лучше сделать скрытым.Просто id_key_city нужен чтобы вставлять по нему в комбик имя города(city_name).И если можешь опиши немного подробнее)
Записан
Emc
Гость
« Ответ #3 : Август 15, 2007, 10:19 »

судя по функции setModelColumn ( int visibleColumn ) QComboBox способно отображать только одну колонку, но если у тебя один из параметров скрыт, то проблем нет -- изучай QStandardItemModel, или добавляй один из параметров через setItemData
Записан
Gryz
Гость
« Ответ #4 : Август 15, 2007, 11:39 »

Цитата: "linuxoid"
Люди добрые подскажите как переделать QComboBox чтобы в нём в одном поле могло содержаться два значения(для моего случая нужно чтобы из таблицы показывалось в одном поле id_key_city и city_name - они связаны :?:

Отношение один к одному?
Записан
linuxoid
Гость
« Ответ #5 : Август 15, 2007, 14:31 »

сорри за тупой вопрос но что значит один к одному?
Записан
Gryz
Гость
« Ответ #6 : Август 15, 2007, 14:56 »

Т.е. выбор одного из значений однозначно определял второе.
Записан
linuxoid
Гость
« Ответ #7 : Август 15, 2007, 15:09 »

т.е. два значения в комбике [_]____]      id_key_city и city_name  ,id_key_city это id № для имени города city_name.     т.е. чтобы выбрать город я выбираю id_key_city
Записан
SABROG
Гость
« Ответ #8 : Август 15, 2007, 16:58 »

Если тебе нужно два поля ввода, то зачем ты извращаешься ? Ну возьми рядышком поставь QLineEdit и QComboBox, обрабатывай сигнал currentIndexChanged, внутри слота пихай в QLineEdit - id_key_city.

Или возьми QComboBox->lineEdit() и поставь ему setInputMask, тогда все будет вводится в одном поле. А потом через разделитель какой нибудь ":" строку разобъешь на два значения.
Записан
Вячеслав
Гость
« Ответ #9 : Август 16, 2007, 09:13 »

Млин .... чего-то я торможу - а код города нужен юзверю или нет ? Если да - делаешь  tableview И пихаешь его как popup, если нет - то ид в userdata(как уже говорили)
Записан
linuxoid
Гость
« Ответ #10 : Август 16, 2007, 09:41 »

мне надо не 2 поля ввода а два поля:как мне сделать следующее??
в первом отображается id_key_city с помощью sql запроса а во втором city_name с помощью того же sql запроса.  причём id_key_city это Уникальный номер для значений city_name!И если можно опиши с кодом пример QLineEdit и ComboBox плз

добавлено спустя 1 минуту:

 мне надо не 2 поля ввода а два поля:как мне сделать следующее??
в первом отображается id_key_city с помощью sql запроса а во втором city_name с помощью того же sql запроса.  причём id_key_city это Уникальный номер для значений city_name!И если можно опиши с кодом пример QLineEdit и ComboBox плз
Записан
SABROG
Гость
« Ответ #11 : Август 16, 2007, 10:44 »

Если ключ менять не надо, то QLabel + QComboBox. Обрабатываешь сигнал QComboBox - currentIndexChanged, внутри слота для этого сигнала берешь из поля cbMy->itemData(index) свой ID города и пихаешь его в QLabel. Далее обрабатываешься сигнал activated у QComboBox, он приходит после того как пользователь изменит или не изменит имя города и нажмет Enter в поле. Там делаешь проверку, если текст не изменился через cbMy->lineEdit()->isModified() метод QComboBox'a. Если возвращается true, значит пользователь изменил название, берешь ключ города из itemData(index) и составляешь SQL запрос типа:

Код:

QString("UPDATE mytable SET city_name='%1' WHERE city_id=%2;").arg(cbMy->currentText()).arg(cbMy->itemData(cbMy->currentIndex()).toInt());


Соответственно надо не забыть этими ключами заполнить ComboBox:

cbMy->addItem(city_name, city_key);

Записан
linuxoid
Гость
« Ответ #12 : Август 16, 2007, 10:55 »

Спасибо
Записан
SABROG
Гость
« Ответ #13 : Август 16, 2007, 11:02 »

Насчет SQL запросов, лучше использовать всякие bindValue(), т.к. этот метод сам следит за тем, чтобы текст был в кавычках (escaped) и небыло возможности SQL Injection или покрошить базу только потому, что пользователь поставил запятых, кавычек разного рода в имени города.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 21.