Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kibsoft от Март 15, 2010, 20:49



Название: Выпадающий виджет
Отправлено: kibsoft от Март 15, 2010, 20:49
Подскажите пожалуйста, как можно реализовать выпадающий виджет(желательно QTabWidget), например как в IM клиентах при клике на кнопку смайлов. Пробовал создавать QTabWidget, родителем делал окно в котором есть toolbar с кнопкой, по нажатию которой виджет появлялся..но почему то фон всегда белый и нет авторазмера. А как отдельное окно не катит  Надо чтобы прям под кнопкой вываливался.

Пример:
(http://rghost.ru/1171575/thumb.png) (http://rghost.ru/1171575.view)


Название: Re: Выпадающий виджет
Отправлено: ufna от Март 15, 2010, 21:07
это отдельный виджет, с frameless hint'ом.

наследуй QWidget, создавай с данным флагом, в пейнт эвенте определи все что нужно по фонам и т.п.


Название: Re: Выпадающий виджет
Отправлено: kibsoft от Март 15, 2010, 21:21
Вопрос решен. Убрал парента, убрал рамку вокруг окна и используя mapToGlobal разместил виджет под кнопкой..


Название: Re: Выпадающий виджет
Отправлено: kkk777kkk от Апрель 01, 2010, 13:03
решил сделать что-то похожее, но мучает вопрос: по какому признаку прятать диалог/виджет? вот combobox знает когда я нажал где-то нажал на форме или вообще окно потеряло фокус


Название: Re: Выпадающий виджет
Отправлено: sendevent от Апрель 01, 2010, 14:01
решил сделать что-то похожее, но мучает вопрос: по какому признаку прятать диалог/виджет? вот combobox знает когда я нажал где-то нажал на форме или вообще окно потеряло фокус
отслеживать фокус - QWidget::focus[In|Out]Event и QWidget::[enter|leave]Event.


Название: Re: Выпадающий виджет
Отправлено: kkk777kkk от Апрель 01, 2010, 15:20
пасип, как-то сам не додумался, буду пробовать  ::)


Название: Re: Выпадающий виджет
Отправлено: kkk777kkk от Апрель 01, 2010, 15:42
вот не знаю почему, но
QWidget::focus[In|Out]Event - не могу словить
QWidget::[enter|leave]Event - ловлю нормально

update:

если на свой диалог травлю setFocus(); тогда получается словить focusEvent, но если потом активирую lineEdit, то получаю событие focusOutEvent


Название: Re: Выпадающий виджет
Отправлено: sendevent от Апрель 01, 2010, 15:55
1. попробуй задать FocusPolicy - StrongFocus.
2.
Цитировать
но если потом активирую lineEdit, то получаю событие focusOutEvent
ну вроде правильно - фокус же передается активированному лайнедиту, значит, уходит от виджета... или я чегото не понял.


Название: Re: Выпадающий виджет
Отправлено: kkk777kkk от Апрель 01, 2010, 15:59
получается, что когда я выбираю контрол на этом диалоге (на котором ловлю фокус), то они забирают фокус на себя и считается, что диалог уже не имеет фокуса... как же ж сделать это красиво, можно конечно попробовать проверять все дочерние контролы на наличие фокуса, но это не красиво


Название: Re: Выпадающий виджет
Отправлено: Sergey B. от Апрель 01, 2010, 17:20
пусть элемент выбранный эмитет сигнал, а его уже лови в диалоге и что-то делай с ним- к примеру возвращай в родительский диалог


Название: Re: Выпадающий виджет
Отправлено: kkk777kkk от Апрель 02, 2010, 10:25
а по какому событию предлагаешь?


Название: Re: Выпадающий виджет
Отправлено: kkk777kkk от Апрель 02, 2010, 10:44
я все-таки сделал это. сделал через
Код:
void QWidget::setFocusProxy ( QWidget * w ) 
и для тех контролов, которые у меня это работает, но для QlineEdit как-то подозрительно, но мне он не нужен :)


Название: Re: Выпадающий виджет
Отправлено: kkk777kkk от Апрель 06, 2010, 16:33
как оказалось это были извращения, а сделал все за меня член enum Qt::WindowType флаг Qt::Popup !