Название: Закрыть окно без смены фокуса Отправлено: Igors от Октябрь 26, 2015, 08:09 Добрый день
Все окна frameless (по многим соображениям) title рисуется самостоятельно и имеет свою бубочку "закрыть". И все хорошо, но есть мелкая неприятность: когда юзер тычет в "закрыть", окно сначала получает фокус, отрисовывается (перекрывая др окна), и только потом закрывается, фокус возвращается на предыдущее окно. Как побороть этот неприятный эффект мигания? Спасибо Название: Re: Закрыть окно без смены фокуса Отправлено: Old от Октябрь 26, 2015, 08:50 А у кнопки закрыть какой focus policy?
Попробуйте установить ей Qt::NoFocus. Название: Re: Закрыть окно без смены фокуса Отправлено: Vladimir от Ноябрь 01, 2015, 19:51 а не подскажите как вы нарисовали свой title c бубочкой "закрыть"?) что переопределить надо или настроить.. а то у меня проект есть под linux с openbox и там никаким образом не хотят убираться кнопки максимизации и минимизации окна! под win флаги работают, а там 0 реакции. так может это вариант нарисовать свой title c одной кнопкой закрыть.. но возможность перемещать окна должна остаться!
Название: Re: Закрыть окно без смены фокуса Отправлено: Racheengel от Ноябрь 01, 2015, 21:41 В линуксе все решает оконный менеджер.
А воообще технология такая, прячем заголовок пплностью и сами ставим какие хотим кнопки. Но тока если менеджер не против ;) Название: Re: Закрыть окно без смены фокуса Отправлено: Bepec от Ноябрь 02, 2015, 07:57 Да, интересная задачка, но без переключения на окно по идее не получится. Возможно сделать возврат на текущее фокусное окно, после закрытия.
А чтобы прям вообще без фокуса - нужно либо вести плотный контроль мыши+окна, либо ковырять оконный менеджер :) Название: Re: Закрыть окно без смены фокуса Отправлено: Igors от Ноябрь 02, 2015, 09:53 а не подскажите как вы нарисовали свой title c бубочкой "закрыть"?) А воообще технология такая, прячем заголовок пплностью и сами ставим какие хотим кнопки. Но тока если менеджер не против ;) Товарищи дорогие, ну когда ж научимся тему-то читать? Я уж не прошу "внимательно", просто прочитать. Ну ведь сказано же ("во первых словах моего поста")Все окна frameless Что значит Qt::FramelessWindowHint. Т.е. все окно - площадь клиента. Наоборот, при наличии сыстемного титла этой проблемы не возникает - но он меня не устраивает.Да, интересная задачка, но без переключения на окно по идее не получится. Если гадаете - так угадывайте, а то вечно "пальцем в небо". Перехват есть через installNativeEventFilter, но это так хлопотно :'(Название: Re: Закрыть окно без смены фокуса Отправлено: Bepec от Ноябрь 02, 2015, 11:48 Уот так не свистите :D
В любом случае вы ПРИНИМАЕТЕ сообщение и после уже реакция. А тут такая неловкая ситуация, что менеджер оконный вашему окну фокус отдаст :) И вы ничем ему не помешаете. Вы можете хоть вообще прикинуться мертвым окошком без реакций на события, но фокус на нём будет ^_^ PS не путайте ФИЛЬТР СОБЫТИЙ ДЛЯ ПРИЛОЖЕНИЯ и перехват события оконного менеджера. :) Название: Re: Закрыть окно без смены фокуса Отправлено: Igors от Ноябрь 02, 2015, 12:09 Уот так не свистите :D Насчет "свиста" Вам бы (главному свистуну здесь) лучше помолчать в тряпочку :)В любом случае вы ПРИНИМАЕТЕ сообщение и после уже реакция. А тут такая неловкая ситуация, что менеджер оконный вашему окну фокус отдаст :) И вы ничем ему не помешаете. Вы можете хоть вообще прикинуться мертвым окошком без реакций на события, но фокус на нём будет ^_^ Шо Вы тут рисуете большими буквами? Ваш метод что-то услышать и повторить своими словами. Ну так следуйте ему, я Вам уже сообщил что системное событие нажатие мыши приходит ДО смены фокуса окна, чего Вы носитесь с "оконным менеджером" как курица с яйцом? PS не путайте ФИЛЬТР СОБЫТИЙ ДЛЯ ПРИЛОЖЕНИЯ и перехват события оконного менеджера. :) И вообще - сколько раз Вы клялись не лезть в мои темы? Так нет же, опять "творческий зуд" :'( Название: Re: Закрыть окно без смены фокуса Отправлено: GreatSnake от Ноябрь 02, 2015, 12:32 Дело в том, что все мышиные события сначала получает топ-левел окно.
Попробуйте перехватить событие нажатия мыши на данном окне и игнорировать его в случае попадания на кнопку закрытия. Естественно это событие нужно доставить до кнопки. Название: Re: Закрыть окно без смены фокуса Отправлено: Igors от Ноябрь 02, 2015, 12:46 Дело в том, что все мышиные события сначала получает топ-левел окно. Там и кнопки-то никакой нет, просто рисую иконку - все равно нужно рисовать border и.т.д. А перехват на QWindow пробовал - у сожалению, не проходит, фокус уже на окне. Через нативняк (installNativeEventFilter) да, получаю события мыши ДО смены фокуса - но это ж геморрой на 2 платформах :'(Попробуйте перехватить событие нажатия мыши на данном окне и игнорировать его в случае попадания на кнопку закрытия. Естественно это событие нужно доставить до кнопки. |