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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Закрыть окно без смены фокуса  (Прочитано 4929 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Октябрь 26, 2015, 08:09 »

Добрый день

Все окна frameless (по многим соображениям) title рисуется самостоятельно и имеет свою бубочку "закрыть". И все хорошо, но есть мелкая неприятность: когда юзер тычет в "закрыть", окно сначала получает фокус, отрисовывается (перекрывая др окна), и только потом закрывается, фокус возвращается на предыдущее окно. Как побороть этот неприятный эффект мигания?

Спасибо 
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Октябрь 26, 2015, 08:50 »

А у кнопки закрыть какой focus policy?
Попробуйте установить ей Qt::NoFocus.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #2 : Ноябрь 01, 2015, 19:51 »

а не подскажите как вы нарисовали свой title c бубочкой "закрыть"?) что переопределить надо или настроить.. а то у меня проект есть под linux с openbox и там никаким образом не хотят убираться кнопки максимизации и минимизации окна! под win флаги работают, а там 0 реакции. так может это вариант нарисовать свой title c одной кнопкой закрыть.. но возможность перемещать окна должна остаться!
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Ноябрь 01, 2015, 21:41 »

В линуксе все решает оконный менеджер.

А воообще технология такая, прячем заголовок пплностью и сами ставим какие хотим кнопки. Но тока если менеджер не против Подмигивающий
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Bepec
Гость
« Ответ #4 : Ноябрь 02, 2015, 07:57 »

Да, интересная задачка, но без переключения на окно по идее не получится. Возможно сделать возврат на текущее фокусное окно, после закрытия.
А чтобы прям вообще без фокуса - нужно либо вести плотный контроль мыши+окна, либо ковырять оконный менеджер Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Ноябрь 02, 2015, 09:53 »

а не подскажите как вы нарисовали свой title c бубочкой "закрыть"?)
А воообще технология такая, прячем заголовок пплностью и сами ставим какие хотим кнопки. Но тока если менеджер не против Подмигивающий
Товарищи дорогие, ну когда ж научимся тему-то читать? Я уж не прошу "внимательно", просто прочитать. Ну ведь сказано же ("во первых словах моего поста")
Все окна frameless
Что значит Qt::FramelessWindowHint. Т.е. все окно - площадь клиента. Наоборот, при наличии сыстемного титла этой проблемы не возникает - но он меня не устраивает.

Да, интересная задачка, но без переключения на окно по идее не получится.
Если гадаете - так угадывайте, а то вечно "пальцем в небо". Перехват есть через installNativeEventFilter, но это так хлопотно  Плачущий
Записан
Bepec
Гость
« Ответ #6 : Ноябрь 02, 2015, 11:48 »

Уот так не свистите Веселый
В любом случае вы ПРИНИМАЕТЕ сообщение и после уже реакция. А тут такая неловкая ситуация, что менеджер оконный вашему окну фокус отдаст Улыбающийся И вы ничем ему не помешаете. Вы можете хоть вообще прикинуться мертвым окошком без реакций на события, но фокус на нём будет ^_^

PS не путайте ФИЛЬТР СОБЫТИЙ ДЛЯ ПРИЛОЖЕНИЯ и перехват события оконного менеджера. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Ноябрь 02, 2015, 12:09 »

Уот так не свистите Веселый
Насчет "свиста" Вам бы (главному свистуну здесь) лучше помолчать в тряпочку  Улыбающийся

В любом случае вы ПРИНИМАЕТЕ сообщение и после уже реакция. А тут такая неловкая ситуация, что менеджер оконный вашему окну фокус отдаст Улыбающийся И вы ничем ему не помешаете. Вы можете хоть вообще прикинуться мертвым окошком без реакций на события, но фокус на нём будет ^_^

PS не путайте ФИЛЬТР СОБЫТИЙ ДЛЯ ПРИЛОЖЕНИЯ и перехват события оконного менеджера. Улыбающийся
Шо Вы тут рисуете большими буквами? Ваш метод что-то услышать и повторить своими словами. Ну так следуйте ему, я Вам уже сообщил что системное событие нажатие мыши приходит ДО смены фокуса окна, чего Вы носитесь с "оконным менеджером" как курица с яйцом?

И вообще - сколько раз Вы клялись не лезть в мои темы? Так нет же, опять "творческий зуд"  Плачущий
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Ноябрь 02, 2015, 12:32 »

Дело в том, что все мышиные события сначала получает топ-левел окно.
Попробуйте перехватить событие нажатия мыши на данном окне и игнорировать его в случае попадания на кнопку закрытия.
Естественно это событие нужно доставить до кнопки.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Ноябрь 02, 2015, 12:46 »

Дело в том, что все мышиные события сначала получает топ-левел окно.
Попробуйте перехватить событие нажатия мыши на данном окне и игнорировать его в случае попадания на кнопку закрытия.
Естественно это событие нужно доставить до кнопки.
Там и кнопки-то никакой нет, просто рисую иконку - все равно нужно рисовать border и.т.д. А перехват на QWindow пробовал - у сожалению, не проходит, фокус уже на окне. Через нативняк (installNativeEventFilter) да, получаю события мыши ДО смены фокуса - но это ж геморрой на 2 платформах  Плачущий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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