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

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

Форум на CrossPlatform.RU _ Qt Модель/Представление _ РЕШЕНО! Как установить фокус на Виджет в диалоговом окне редактирования записи

Автор: mishabard 15.7.2011, 11:26

Есть диалоговое окно для редактирования таблицы, создается динамически. На нем размещены виджеты и связаны с полями таблицы через QDataWidgetMapper.
Вопрос: как узнать из функции какой виджет в диалоговом окне связан с определенным номером колонки в таблице?
Цель: установить фокус редактирования на нужный виджет при открывании диалогового окна, т.е. на тот, который связан с колонкой в таблице, по которой шелкунл пользователь.

Автор: Litkevich Yuriy 15.7.2011, 19:12

за выделение ячеек представления отвечает МодельВыделения, у представления её можно получить с помощью QAbstractItemView::selectionModel ().
Через эту модель много полезного можно узнать (обычно она возвращает модельный индекс). Зная модельный индекс можно установить текущий виджет (я так понимаю, что это и будет фокус), с помощью QDataWidgetMapper::setCurrentModelIndex()

Автор: mishabard 18.7.2011, 10:08

Решил задачу следующим образом, может кому пригодиться!
В конструкторе диалогового окна чтобы установить фокус выделенной ячейки на связанный с ней виджет делаем следующее:

....
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)