Полная версия этой страницы:
Фокус ввода на виджете?
Добрый день.
Подскажите как сделать. Нужна следующая функциональность виджета: show->открывается поверх всех дочерних окон главного окна, при клике мышкой вне этого виджета нужно его скрыть (т.е. сделать его invisible). как лучше сделать?(через фокус евент не прокатывает)
Алексей1153
5.10.2010, 13:00
це QMenu
или даже любой QWidget с отслеживанием leaveEvent . Если курсор не на фиджете и фокуса нет (проверять по таймеру, к примеру), то скрываем
хм, даже leaveEvent не надо - таймера достаточно
Не QMenu мне не подходит, тк при кликах вне элементов виджета меню он скрывается.
Естьли какойто евент который грубо говоря генерится при изменении позиции виджета в стеке виджетов?
leaveEvent не подойдет, мне нужно скрывать именно при клике вне виджета. Если клика нет скрывать не нужно
Алексей1153
5.10.2010, 13:03
wiz29, я подправил пост. Там ещё нужно добавить проверку - что главное окно не в фокусе + виджет не в фокусе
не совсем уловил мысль, зачем таймер?
Алексей1153
5.10.2010, 13:51
по таймеру при зажжённом виджете проверять, где сейчас находится курсор. Раз в полсекунды будет достаточно
Мне бы хотелось скрывать по клику "мимо" виджета. Мне не понятно по чему при вызове show() виджет появляется, но фокуса на нем нет, даже если он applicationModal
Тем более таймер, как мне кажется, не оч удачная идея, если виджет может быть скрыт / открыт несколькими способами
Алексей1153
6.10.2010, 9:39
эхъ, в общем без экспериментов трудно что-то говорить, а провести их сейчас немного некогда...
я щас и эксперементирую, как решу отпишусь
нашел решение, обрабатывая QEvent::WindowDeactivate получается нужный эффект.
Кликая мышью "мимо" виджета как раз и приходит данное событие.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.