Есть диалоговое окно для редактирования таблицы, создается динамически. На нем размещены виджеты и связаны с полями таблицы через QDataWidgetMapper.
Вопрос: как узнать из функции какой виджет в диалоговом окне связан с определенным номером колонки в таблице?
Цель: установить фокус редактирования на нужный виджет при открывании диалогового окна, т.е. на тот, который связан с колонкой в таблице, по которой шелкунл пользователь.
за выделение ячеек представления отвечает МодельВыделения, у представления её можно получить с помощью QAbstractItemView::selectionModel ().
Через эту модель много полезного можно узнать (обычно она возвращает модельный индекс). Зная модельный индекс можно установить текущий виджет (я так понимаю, что это и будет фокус), с помощью QDataWidgetMapper::setCurrentModelIndex()
Решил задачу следующим образом, может кому пригодиться!
В конструкторе диалогового окна чтобы установить фокус выделенной ячейки на связанный с ней виджет делаем следующее:
....
QTableView * view;
....
mapper = new QDataWidgetMapper(this);
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
mapper->setModel(model);
mapper->setItemDelegate(new QSqlRelationalDelegate(this));
mapper->addMapping(pManager,10);
......
mapper->addMapping(pPartner, 11);
......
QWidget * curWidget=mapper->mappedWidgetAt(view->currentIndex().column());
if (curWidget)
curWidget->setFocus();
else
pManager->setFocus();//фокус по умолчанию, если не найдено ни одного связанного виджета
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)