Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Модель/Представление _ Вытащить индекс из модели для мапера

Автор: JohnZ 3.7.2015, 13:28

Есть модель QSqlTableModel, указатель на неё передаётся в диалог.
В диалоге создаём мапер, которому (как оказалось) кроме модели
нужен ещё и индекс записи (хотя он-же должен находиться в модели ? )

dataMapper = new QDataWidgetMapper(this); // this это QDialog
dataMapper->setModel(model);
dataMapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);

// dataMapper->setCurrentModelIndex(model->index( ??? )); <--- что тут поставить ???

dataMapper->addMapping(ui.salary, model->fieldIndex("zrp"));

И второй вопрос, - можно-ли смапировать QComboBox на int-овое поле ?
Если да, покажите код, плз ...

Заранее благодарен за помощь.

Автор: lanz 3.7.2015, 18:11

setCurrentModelIndex задает какую строку вы сейчас отображаете на виджете.
Можете использовать setCurrentIndex()
http://doc.qt.io/qt-4.8/qdatawidgetmapper.html#currentIndex-prop
или вообще toFirst()
http://doc.qt.io/qt-4.8/qdatawidgetmapper.html#toFirst

По второму вопросу, зависит от того что вы имеете под словом смапировать.
Вам нужно заполнить комбобокс правильными значениями(вручную, либо назначить ему соответствующую секцию таблицы)
Затем сделать mapping через QDataWidgetMapper к нужному полю.
ЕМНИП USER property у QComboBox как раз currentIndex, поэтому все должно срастись без проблем.

Автор: JohnZ 7.7.2015, 20:34

Цитата(lanz @ 3.7.2015, 18:11) *
setCurrentModelIndex задает какую строку вы сейчас отображаете на виджете.
Можете использовать setCurrentIndex()
http://doc.qt.io/qt-4.8/qdatawidgetmapper.html#currentIndex-prop
или вообще toFirst()
http://doc.qt.io/qt-4.8/qdatawidgetmapper.html#toFirst

Дык это я у модели хотел спросить, какую строку она отображает, что-бы с неё взять ключ и по нему заполнить диалог...
Если toFirst(), то я в диалоге, (т.е. в форме редактирования записи) всегда буду видеть только 1-ю запись ?!
Цитата
По второму вопросу, зависит от того что вы имеете под словом смапировать.
Вам нужно заполнить комбобокс правильными значениями(вручную, либо назначить ему соответствующую секцию таблицы)
Затем сделать mapping через QDataWidgetMapper к нужному полю.
ЕМНИП USER property у QComboBox как раз currentIndex, поэтому все должно срастись без проблем.

Как раз currentIndex я и имел в видЕ, поле БД интовое, QComboBox уже заполнен "вручную".
Нужно что-бы в зависимости от значения поля в БД QComboBox сам выбирал нужную строку, по номеру, типа switch-а ?

Автор: lanz 8.7.2015, 23:29

Цитата
Дык это я у модели хотел спросить, какую строку она отображает, что-бы с неё взять ключ и по нему заполнить диалог...

Модель не отображает никакой строки. Конкретная строка отображается именно во вью, в данном случае QWidgetMapper.
QWidgetMapper же и отвечает за заполнение подотчетного виджета.
Какая строка конкретно выделена для этого диалога можно спросить у того вью, в котором выделяются строки и потом сделать
setCurrentIndex() на нее.

Цитата
Нужно что-бы в зависимости от значения поля в БД QComboBox сам выбирал нужную строку, по номеру, типа switch-а ?

Это автоматически делает QWidgetMapper.

Автор: JohnZ 9.7.2015, 11:40

Получилось ! Спасибо, lanz !!!

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)