Russian Qt Forum

Qt => Model-View (MV) => Тема начата: galilley от Сентябрь 02, 2010, 18:19



Название: QComboBox with submenu в качестве делегата
Отправлено: galilley от Сентябрь 02, 2010, 18:19
Доброго времени!
Захотелось сделать делегат типа combobox, но чтобы были подменю.
Сам combobox создавать подменю не умеет. Пробовал взять QToolButton, но возникла проблема с внесением данных в модель. По клику на ячейке открывается toolbutton, но при шелчке по кномке открывается меню   QToolButton, а сам persistentEditor закрывается, и происходит комит того значения, что было по умолчанию. Т.о. дальнейший выбор в открывшемся меню ни на что не влияет, и перехватить его у меня не получается.
Может кто создавал что-нить подобное?
Спасибо.


Название: Re: QComboBox with submenu в качестве делегата
Отправлено: merke от Сентябрь 02, 2010, 18:31
А что если не использовать ни какие делегаты, взять что то типа фрейма, в комбобоксе если у итема есть субменю ставим флаг именно для этого итема, при клике на нем мы смотрим на этот флаг если есть субменю определяем координаты указателя через QEvent и показываем наш сгенерированный фрейм со своими уникальными для каждого случая данными. при клике за фреймом убирать фрейм.


Название: Re: QComboBox with submenu в качестве делегата
Отправлено: Marat(Qt) от Сентябрь 09, 2010, 13:16
Доброго времени!
Захотелось сделать делегат типа combobox, но чтобы были подменю.
Сам combobox создавать подменю не умеет. Пробовал взять QToolButton, но возникла проблема с внесением данных в модель. По клику на ячейке открывается toolbutton, но при шелчке по кномке открывается меню   QToolButton, а сам persistentEditor закрывается, и происходит комит того значения, что было по умолчанию. Т.о. дальнейший выбор в открывшемся меню ни на что не влияет, и перехватить его у меня не получается.
Может кто создавал что-нить подобное?
Спасибо.
Насколько мне известно, эдитор закрывается когда теряет фокус. Если в качестве эдитора использовать обычный виджет со strongFocus и лежащим на ним toolButton с noFocus, то, вероятно, эдитор не закроется при клике по toolButton.

p.s. У меня нет опыта работы с меню для toolButton'a. Однако, можно предположить, что именно это меню отнимает фокус, помешайте ему (у меню тоже есть focusPolicy)


Название: Re: QComboBox with submenu в качестве делегата
Отправлено: galilley от Сентябрь 12, 2010, 17:44
Всё гениально просто, спасибо за идею!
Дело действительно в потере фокуса, только вопрос решился не
Код:
menu->setFocusPolicy(Qt::NoFocus);
а с помощью
Код:
editor->setFocusProxy( menu);
Ну и ещё по вкусу:
Код:
editor->setPopupMode( QToolButton::InstantPopup );
где:
Код:
QToolButton *editor = new QToolButton(parent);
QMenu* menu = new QMenu(editor);