Russian Qt Forum
Октябрь 01, 2024, 02:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Выпадающий виджет  (Прочитано 9020 раз)
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« : Март 15, 2010, 20:49 »

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

Пример:
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
ufna
Гость
« Ответ #1 : Март 15, 2010, 21:07 »

это отдельный виджет, с frameless hint'ом.

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

Сообщений: 625


Просмотр профиля WWW
« Ответ #2 : Март 15, 2010, 21:21 »

Вопрос решен. Убрал парента, убрал рамку вокруг окна и используя mapToGlobal разместил виджет под кнопкой..
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
kkk777kkk
Гость
« Ответ #3 : Апрель 01, 2010, 13:03 »

решил сделать что-то похожее, но мучает вопрос: по какому признаку прятать диалог/виджет? вот combobox знает когда я нажал где-то нажал на форме или вообще окно потеряло фокус
Записан
sendevent
Гость
« Ответ #4 : Апрель 01, 2010, 14:01 »

решил сделать что-то похожее, но мучает вопрос: по какому признаку прятать диалог/виджет? вот combobox знает когда я нажал где-то нажал на форме или вообще окно потеряло фокус
отслеживать фокус - QWidget::focus[In|Out]Event и QWidget::[enter|leave]Event.
Записан
kkk777kkk
Гость
« Ответ #5 : Апрель 01, 2010, 15:20 »

пасип, как-то сам не додумался, буду пробовать  Строит глазки
Записан
kkk777kkk
Гость
« Ответ #6 : Апрель 01, 2010, 15:42 »

вот не знаю почему, но
QWidget::focus[In|Out]Event - не могу словить
QWidget::[enter|leave]Event - ловлю нормально

update:

если на свой диалог травлю setFocus(); тогда получается словить focusEvent, но если потом активирую lineEdit, то получаю событие focusOutEvent
« Последнее редактирование: Апрель 01, 2010, 15:49 от kkk777kkk » Записан
sendevent
Гость
« Ответ #7 : Апрель 01, 2010, 15:55 »

1. попробуй задать FocusPolicy - StrongFocus.
2.
Цитировать
но если потом активирую lineEdit, то получаю событие focusOutEvent
ну вроде правильно - фокус же передается активированному лайнедиту, значит, уходит от виджета... или я чегото не понял.
« Последнее редактирование: Апрель 01, 2010, 15:59 от sendevent » Записан
kkk777kkk
Гость
« Ответ #8 : Апрель 01, 2010, 15:59 »

получается, что когда я выбираю контрол на этом диалоге (на котором ловлю фокус), то они забирают фокус на себя и считается, что диалог уже не имеет фокуса... как же ж сделать это красиво, можно конечно попробовать проверять все дочерние контролы на наличие фокуса, но это не красиво
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #9 : Апрель 01, 2010, 17:20 »

пусть элемент выбранный эмитет сигнал, а его уже лови в диалоге и что-то делай с ним- к примеру возвращай в родительский диалог
Записан
kkk777kkk
Гость
« Ответ #10 : Апрель 02, 2010, 10:25 »

а по какому событию предлагаешь?
Записан
kkk777kkk
Гость
« Ответ #11 : Апрель 02, 2010, 10:44 »

я все-таки сделал это. сделал через
Код:
void QWidget::setFocusProxy ( QWidget * w ) 
и для тех контролов, которые у меня это работает, но для QlineEdit как-то подозрительно, но мне он не нужен Улыбающийся
Записан
kkk777kkk
Гость
« Ответ #12 : Апрель 06, 2010, 16:33 »

как оказалось это были извращения, а сделал все за меня член enum Qt::WindowType флаг Qt::Popup !
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.