Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вытащить индекс из модели для мапера
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
JohnZ
Есть модель 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
setCurrentModelIndex задает какую строку вы сейчас отображаете на виджете.
Можете использовать setCurrentIndex()
http://doc.qt.io/qt-4.8/qdatawidgetmapper....rrentIndex-prop
или вообще toFirst()
http://doc.qt.io/qt-4.8/qdatawidgetmapper.html#toFirst

По второму вопросу, зависит от того что вы имеете под словом смапировать.
Вам нужно заполнить комбобокс правильными значениями(вручную, либо назначить ему соответствующую секцию таблицы)
Затем сделать mapping через QDataWidgetMapper к нужному полю.
ЕМНИП USER property у QComboBox как раз currentIndex, поэтому все должно срастись без проблем.
JohnZ
Цитата(lanz @ 3.7.2015, 18:11) *
setCurrentModelIndex задает какую строку вы сейчас отображаете на виджете.
Можете использовать setCurrentIndex()
http://doc.qt.io/qt-4.8/qdatawidgetmapper....rrentIndex-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
Цитата
Дык это я у модели хотел спросить, какую строку она отображает, что-бы с неё взять ключ и по нему заполнить диалог...

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

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

Это автоматически делает QWidgetMapper.
JohnZ
Получилось ! Спасибо, lanz !!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2021 IPS, Inc.