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() - ноль эмоций у маппера.
Class MyCombo(QtGui.QComboBox) def __init__(sf, connection, table, field_for_search, field_for_result) QtGui.QComboBox.__init__() #sf.value = None sf.value = QtGui.QLineEdit() sf.view = QtGui.QTableView() sf.model = QtSqlTableModel(None, connection) sf.model.setTable(table) sf.model.select() sf.view.setModel(sf.view) sf.setModel(sf.model) sf.setModelColumn(sf.model.fieldIndex(field_for_search)) sf.setView(sf.view) sf.activated.connect(sf.onSelect) def onSelect(sf): sf.value.setText(sf.model.record(sf.currentIndex().value(sf.field_for_result)))