Название: Попытка преобразования QComboBox Отправлено: linuxoid от Август 15, 2007, 08:09 Люди добрые подскажите как переделать QComboBox чтобы в нём в одном поле могло содержаться два значения(для моего случая нужно чтобы из таблицы показывалось в одном поле id_key_city и city_name - они связаны :?:
Название: Попытка преобразования QComboBox Отправлено: SABROG от Август 15, 2007, 08:19 Запихнуть QPair в Qt::UserRole для каждого итема комбика.
Или Qt::UserRole - id_key_city, в Qt::UserRole+1 - city_name и т.д. Или ты хочешь разделить lineEdit кобмика на две части, типа кнопка комбика одна, а поля ввода 2 ? Название: Попытка преобразования QComboBox Отправлено: linuxoid от Август 15, 2007, 08:46 нужно стелать так чтобы поле комбика содержало id_key_city и city_name(для city_name id_key_city это ид номер) из таблицы,а вообще id_key_city лучше сделать скрытым.Просто id_key_city нужен чтобы вставлять по нему в комбик имя города(city_name).И если можешь опиши немного подробнее)
Название: Попытка преобразования QComboBox Отправлено: Emc от Август 15, 2007, 10:19 судя по функции setModelColumn ( int visibleColumn ) QComboBox способно отображать только одну колонку, но если у тебя один из параметров скрыт, то проблем нет -- изучай QStandardItemModel, или добавляй один из параметров через setItemData
Название: Re: Попытка преобразования QComboBox Отправлено: Gryz от Август 15, 2007, 11:39 Цитата: "linuxoid" Люди добрые подскажите как переделать QComboBox чтобы в нём в одном поле могло содержаться два значения(для моего случая нужно чтобы из таблицы показывалось в одном поле id_key_city и city_name - они связаны :?: Отношение один к одному? Название: Попытка преобразования QComboBox Отправлено: linuxoid от Август 15, 2007, 14:31 сорри за тупой вопрос но что значит один к одному?
Название: Попытка преобразования QComboBox Отправлено: Gryz от Август 15, 2007, 14:56 Т.е. выбор одного из значений однозначно определял второе.
Название: Попытка преобразования QComboBox Отправлено: linuxoid от Август 15, 2007, 15:09 т.е. два значения в комбике [_]____] id_key_city и city_name ,id_key_city это id № для имени города city_name. т.е. чтобы выбрать город я выбираю id_key_city
Название: Попытка преобразования QComboBox Отправлено: SABROG от Август 15, 2007, 16:58 Если тебе нужно два поля ввода, то зачем ты извращаешься ? Ну возьми рядышком поставь QLineEdit и QComboBox, обрабатывай сигнал currentIndexChanged, внутри слота пихай в QLineEdit - id_key_city.
Или возьми QComboBox->lineEdit() и поставь ему setInputMask, тогда все будет вводится в одном поле. А потом через разделитель какой нибудь ":" строку разобъешь на два значения. Название: Попытка преобразования QComboBox Отправлено: Вячеслав от Август 16, 2007, 09:13 Млин .... чего-то я торможу - а код города нужен юзверю или нет ? Если да - делаешь tableview И пихаешь его как popup, если нет - то ид в userdata(как уже говорили)
Название: Попытка преобразования QComboBox Отправлено: linuxoid от Август 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 плз Название: Попытка преобразования QComboBox Отправлено: SABROG от Август 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 запрос типа:
Код:
Соответственно надо не забыть этими ключами заполнить ComboBox: cbMy->addItem(city_name, city_key); (http://img186.imageshack.us/img186/8389/comboxn2.jpg) Название: Попытка преобразования QComboBox Отправлено: linuxoid от Август 16, 2007, 10:55 Спасибо
Название: Попытка преобразования QComboBox Отправлено: SABROG от Август 16, 2007, 11:02 Насчет SQL запросов, лучше использовать всякие bindValue(), т.к. этот метод сам следит за тем, чтобы текст был в кавычках (escaped) и небыло возможности SQL Injection или покрошить базу только потому, что пользователь поставил запятых, кавычек разного рода в имени города.
|