Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Фокус ввода на виджете?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
wiz29
Добрый день.
Подскажите как сделать. Нужна следующая функциональность виджета: show->открывается поверх всех дочерних окон главного окна, при клике мышкой вне этого виджета нужно его скрыть (т.е. сделать его invisible). как лучше сделать?(через фокус евент не прокатывает)
Алексей1153
це QMenu

или даже любой QWidget с отслеживанием leaveEvent . Если курсор не на фиджете и фокуса нет (проверять по таймеру, к примеру), то скрываем


хм, даже leaveEvent не надо - таймера достаточно
wiz29
Не QMenu мне не подходит, тк при кликах вне элементов виджета меню он скрывается.
Естьли какойто евент который грубо говоря генерится при изменении позиции виджета в стеке виджетов?


leaveEvent не подойдет, мне нужно скрывать именно при клике вне виджета. Если клика нет скрывать не нужно
Алексей1153
wiz29, я подправил пост. Там ещё нужно добавить проверку - что главное окно не в фокусе + виджет не в фокусе
wiz29
не совсем уловил мысль, зачем таймер?
Алексей1153
по таймеру при зажжённом виджете проверять, где сейчас находится курсор. Раз в полсекунды будет достаточно
wiz29
Мне бы хотелось скрывать по клику "мимо" виджета. Мне не понятно по чему при вызове show() виджет появляется, но фокуса на нем нет, даже если он applicationModal

Тем более таймер, как мне кажется, не оч удачная идея, если виджет может быть скрыт / открыт несколькими способами
Алексей1153
эхъ, в общем без экспериментов трудно что-то говорить, а провести их сейчас немного некогда...
wiz29
я щас и эксперементирую, как решу отпишусь:)
wiz29
нашел решение, обрабатывая QEvent::WindowDeactivate получается нужный эффект.
Кликая мышью "мимо" виджета как раз и приходит данное событие.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.