Russian Qt Forum
Ноябрь 25, 2024, 07:26
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Закрыть окно без смены фокуса
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Закрыть окно без смены фокуса (Прочитано 4927 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Закрыть окно без смены фокуса
«
:
Октябрь 26, 2015, 08:09 »
Добрый день
Все окна frameless (по многим соображениям) title рисуется самостоятельно и имеет свою бубочку "закрыть". И все хорошо, но есть мелкая неприятность: когда юзер тычет в "закрыть", окно сначала получает фокус, отрисовывается (перекрывая др окна), и только потом закрывается, фокус возвращается на предыдущее окно. Как побороть этот неприятный эффект мигания?
Спасибо
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Закрыть окно без смены фокуса
«
Ответ #1 :
Октябрь 26, 2015, 08:50 »
А у кнопки закрыть какой focus policy?
Попробуйте установить ей Qt::NoFocus.
Записан
Vladimir
Крякер
Offline
Сообщений: 305
Re: Закрыть окно без смены фокуса
«
Ответ #2 :
Ноябрь 01, 2015, 19:51 »
а не подскажите как вы нарисовали свой title c бубочкой "закрыть"?) что переопределить надо или настроить.. а то у меня проект есть под linux с openbox и там никаким образом не хотят убираться кнопки максимизации и минимизации окна! под win флаги работают, а там 0 реакции. так может это вариант нарисовать свой title c одной кнопкой закрыть.. но возможность перемещать окна должна остаться!
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Закрыть окно без смены фокуса
«
Ответ #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
Гость
Re: Закрыть окно без смены фокуса
«
Ответ #4 :
Ноябрь 02, 2015, 07:57 »
Да, интересная задачка, но без переключения на окно по идее не получится. Возможно сделать возврат на текущее фокусное окно, после закрытия.
А чтобы прям вообще без фокуса - нужно либо вести плотный контроль мыши+окна, либо ковырять оконный менеджер
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Закрыть окно без смены фокуса
«
Ответ #5 :
Ноябрь 02, 2015, 09:53 »
Цитата: Vladimir от Ноябрь 01, 2015, 19:51
а не подскажите как вы нарисовали свой title c бубочкой "закрыть"?)
Цитата: Racheengel от Ноябрь 01, 2015, 21:41
А воообще технология такая, прячем заголовок пплностью и сами ставим какие хотим кнопки. Но тока если менеджер не против
Товарищи дорогие, ну когда ж научимся тему-то читать? Я уж не прошу "внимательно", просто прочитать. Ну ведь сказано же ("во первых словах моего поста")
Цитата: Igors от Октябрь 26, 2015, 08:09
Все окна frameless
Что значит Qt::FramelessWindowHint. Т.е. все окно - площадь клиента. Наоборот, при наличии сыстемного титла этой проблемы не возникает - но он меня не устраивает.
Цитата: Bepec от Ноябрь 02, 2015, 07:57
Да, интересная задачка, но без переключения на окно по идее не получится.
Если гадаете - так угадывайте, а то вечно "пальцем в небо". Перехват есть через installNativeEventFilter, но это так хлопотно
Записан
Bepec
Гость
Re: Закрыть окно без смены фокуса
«
Ответ #6 :
Ноябрь 02, 2015, 11:48 »
Уот так не свистите
В любом случае вы ПРИНИМАЕТЕ сообщение и после уже реакция. А тут такая неловкая ситуация, что менеджер оконный вашему окну фокус отдаст
И вы ничем ему не помешаете. Вы можете хоть вообще прикинуться мертвым окошком без реакций на события, но фокус на нём будет ^_^
PS не путайте ФИЛЬТР СОБЫТИЙ ДЛЯ ПРИЛОЖЕНИЯ и перехват события оконного менеджера.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Закрыть окно без смены фокуса
«
Ответ #7 :
Ноябрь 02, 2015, 12:09 »
Цитата: Bepec от Ноябрь 02, 2015, 11:48
Уот так не свистите
Насчет "свиста" Вам бы (главному свистуну здесь) лучше помолчать в тряпочку
Цитата: Bepec от Ноябрь 02, 2015, 11:48
В любом случае вы ПРИНИМАЕТЕ сообщение и после уже реакция. А тут такая неловкая ситуация, что менеджер оконный вашему окну фокус отдаст
И вы ничем ему не помешаете. Вы можете хоть вообще прикинуться мертвым окошком без реакций на события, но фокус на нём будет ^_^
PS не путайте ФИЛЬТР СОБЫТИЙ ДЛЯ ПРИЛОЖЕНИЯ и перехват события оконного менеджера.
Шо Вы тут рисуете большими буквами? Ваш метод что-то услышать и повторить своими словами. Ну так следуйте ему, я Вам уже сообщил что системное событие нажатие мыши приходит ДО смены фокуса окна, чего Вы носитесь с "оконным менеджером" как курица с яйцом?
И вообще - сколько раз Вы клялись не лезть в мои темы? Так нет же, опять "творческий зуд"
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Закрыть окно без смены фокуса
«
Ответ #8 :
Ноябрь 02, 2015, 12:32 »
Дело в том, что все мышиные события сначала получает топ-левел окно.
Попробуйте перехватить событие нажатия мыши на данном окне и игнорировать его в случае попадания на кнопку закрытия.
Естественно это событие нужно доставить до кнопки.
Записан
Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Закрыть окно без смены фокуса
«
Ответ #9 :
Ноябрь 02, 2015, 12:46 »
Цитата: GreatSnake от Ноябрь 02, 2015, 12:32
Дело в том, что все мышиные события сначала получает топ-левел окно.
Попробуйте перехватить событие нажатия мыши на данном окне и игнорировать его в случае попадания на кнопку закрытия.
Естественно это событие нужно доставить до кнопки.
Там и кнопки-то никакой нет, просто рисую иконку - все равно нужно рисовать border и.т.д. А перехват на QWindow пробовал - у сожалению, не проходит, фокус уже на окне. Через нативняк (installNativeEventFilter) да, получаю события мыши ДО смены фокуса - но это ж геморрой на 2 платформах
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...