Название: RelationalTableModel и ComboBox Отправлено: svch от Декабрь 11, 2006, 13:01 Народ плиз помогите. Уменя есть RelationalTableModel как свызать связанное поле с QComboBox?
Код: tableModel->setRelation(3, QSqlRelation("city", "id", "name")); Т.е. когда я комбобоксе меняю значение результат сразу записывается в модель и меняется в таблице. Вообщем надо связать элемент таблицы с виджетом(Edit, ComboBox, SpinBox...). Ничего подобного в ассистанте не нашел!!! Надеюсь на помощь... Название: RelationalTableModel и ComboBox Отправлено: bigirbis от Декабрь 11, 2006, 17:57 Должно как-то через QSqlRelationalDelegate
Название: RelationalTableModel и ComboBox Отправлено: Mikhail от Декабрь 11, 2006, 20:33 Смотри примеры $(QTDIR)/examples/sql/relationaltablemodel
Название: RelationalTableModel и ComboBox Отправлено: svch от Декабрь 11, 2006, 21:27 Спасибо за ответы! СДЕЛАЛ. Нужно было написать правильный делигат. Если кому интересно он должен выглядеть примерно так... см. $(QTDIR)/src/sql/models/qsqlrelationaldelegate.h. (как здорово что QT опенсурсная, мужики!!!).
Помогите разобраться теперь как чтобы изменения в одной таблице сразу же отображались в зависимых от нее таблицах (QSqlRelationalTableModel). А то изменения вступают в силу только при перезапуске моей программы!!! :evil: Название: RelationalTableModel и ComboBox Отправлено: svch от Декабрь 13, 2006, 21:35 Не понимаю после написанного ComboBoxDelegate см. $(QTDIR)/src/sql/models/qsqlrelationaldelegate.h измения в child-таблице появляются в ComboBoxDelegate и QTableView у родительской таблице только после перезапуска программы... В качестве СУБД юзается SQLite. Если делегат убрать то в родительской таблице отображаются изменения из child-таблице, как и должно??? Может кто делал что то похожее поделитесь опытом плиз!!! Буду рад:))
Название: RelationalTableModel и ComboBox Отправлено: bigirbis от Декабрь 13, 2006, 22:39 Очевидно, что делегат должен отлавливать что-то типа
void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal] или же что-нибудь подобное... Название: RelationalTableModel и ComboBox Отправлено: -=s0L=- от Июль 09, 2007, 17:26 я нашел правильное решение:
QDataWidgetMapper* map = new QDataWidgetMapper(); map->setModel(model); map->setItemDelegate(new QSqlRelationalDelegate(this)); map->setSubmitPolicy(QDataWidgetMapper::AutoSubmit); потом combo->setModel(model->relationModel(ИНДЕКС ПОЛЯ С FK)); combo->setModelColumn(model->relationModel(ИНДЕКС ПОЛЯ С FK)->fieldIndex("имя колонки в связанной таблице")); потом map->addMapping(combo, ИНДЕКС ПОЛЯ С FK); Все, в комбобоксе отображается нужная строчка и при изменении сразу отображается в связанном с моделью QTableVew, никаких своих делегатов не нужно. |