Название: Как widget mapper'у подсунуть собственный виджет? Язык Питон. Отправлено: Пытон от Январь 19, 2014, 16:11 Создал свой класс на основе QComboBox, пусть он называется MyCombo
Как теперь его привязать к QtGui.QDataWidgetMapper()? Дело в том, что значение, которое должен взять маппер вовсе не то, что отображается в комбобоксе. Там описание некоего кода. Ну, к примеру, комбобокс показывает нам табличку в которой два поля: код (123), описание кода (сто двадцать третий). Так вот, в комбобоксе фигурирует описание, понятное пользователю, а в таблицу SQLite, которая связана с маппером, должно попасть значение кода, а не описания. Вот такой вот у меня комбобокс. При клике на него появляется указанная таблица со всеми её полями, поиск происходит по указанному столбцу, а взять итоговое значение нужно из другого столбца. А потом ещё это значение заВиджетМапперить в таблицу в БД. Код То значение, что должно попасть в таблицу связанную с виджетмаппером получается в sf.value. Как его подсунуть мапперу? Или вообще я делаю всё не так как надо бы? Название: Re: Как widget mapper'у подсунуть собственный виджет? Язык Питон. Отправлено: Пытон от Март 15, 2014, 09:25 Сделал sf.value в классе MyCombo вот таким.
sf.value = QtGui.QLineEdit() Теперь его можно привязать к мапперу типа так: Создать комбобокс из моего класса: combo = MyCombo(someConnection, "someTable", "fieldForSearch", "fieldForResult") Затем организовать маппер так: mapper = QtGui.QWidgerMapper() mapper.setModel(someModel) mapper.addMapping(combo.value, someModel.fieldIndex("someField")) Теперь маппер реагирует на данные в MyCombo.value Но, проблема: реагирует он только после того, как пользователь что-нибудь выберет в комбобоксе. Если пользователь ничего не выбирал (не кликал мышкой, не крутил колёсиком, сменяя пункты), то маппер никак не отреагирует, и то значение, которое появляется в комбобоксе по-умолчанию при его появлении не будет маппером записано в таблицу БД. Короче, маппер среагирует только при щелчке/выборе значения в комбобоксе пользователем. Но ведь я же связал, вроде бы, маппер не с комбобоксом, а с lineEdit'ом, который стал частью комбобокса. Почему он реагирует на события комбобокса, а не lineEdit'а? Я пытался напрямую в __init__ вызвать процедуру OnSelect() - ноль эмоций у маппера. Код
Подскажите, как заставить маппер реагировать на лайнэдит? Название: Re: Как widget mapper'у подсунуть собственный виджет? Язык Питон. Отправлено: vregess от Март 16, 2014, 09:32 Может быть стоит посмотреть на QDataWidgetMapper::setItemDelegate()?
Напиши свой делегат, который будет преобразовывать значение модели в значение для combobox (и обратно). |