Russian Qt Forum
Декабрь 07, 2019, 13:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Окно поверх приложения  (Прочитано 1212 раз)
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2510

чтоб работа волком не казалась :)


Просмотр профиля WWW
« : Ноябрь 16, 2018, 19:08 »

Всем Привет,

есть ли в Qt какая-либо возможность открыть окно приложения поверх всех его останых окон, НО не поверх окон других приложений?

Дополнительно: окно не имеет родителя и не модально. По клику на др.окна того же приложения оно должно оставаться поверху в любом случае.

Флаг Qt::WindowStaysOnTopHint делает окно поверх вообще всех приложений, что не нужно.
Записан

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

http://sintegrial.com - всякий хороший Qt софт (был Грустный )
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2510

чтоб работа волком не казалась :)


Просмотр профиля WWW
« Ответ #1 : Ноябрь 17, 2018, 02:22 »

В общем сделал хак: запускаю в окне таймер и пару раз в секунду вызываю raise().
В принципе работает, дешево и сердито. Но как-то криво, нельзя ли поумнее Грустный
Записан

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

http://sintegrial.com - всякий хороший Qt софт (был Грустный )
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10609


Просмотр профиля
« Ответ #2 : Ноябрь 17, 2018, 03:57 »

Флаг Qt::WindowStaysOnTopHint делает окно поверх вообще всех приложений, что не нужно.
"не нужно" - не то выражение, это просто хреново Улыбающийся

В общем сделал хак: запускаю в окне таймер и пару раз в секунду вызываю raise().
В принципе работает, дешево и сердито. Но как-то криво, нельзя ли поумнее Грустный
В нормальном ОС есть "floating" окна именно с таким поведением, но не на бздошном Вындоуз Плачущий Я сделал чуть другой хак: по сигналу активации приложения выставляю/сбрасываю WindowStaysOnTopHint, тоже не блеск, но лучшего не видно
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2510

чтоб работа волком не казалась :)


Просмотр профиля WWW
« Ответ #3 : Ноябрь 19, 2018, 12:36 »

Я сделал чуть другой хак: по сигналу активации приложения выставляю/сбрасываю WindowStaysOnTopHint, тоже не блеск, но лучшего не видно

Ну, это достойный хак, думаю, получше моего (таймер нинада).

Но кутишники налажали с этим флагом, конечно. Поведение "всегда поверх всех окон" - довольно редкий usecase, а "поверх своих окон" надо часто, но почему-то это у них работает только с модальными диалогами и доквиджетами.
Записан

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

http://sintegrial.com - всякий хороший Qt софт (был Грустный )
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 10609


Просмотр профиля
« Ответ #4 : Ноябрь 20, 2018, 07:43 »

Но кутишники налажали с этим флагом, конечно. Поведение "всегда поверх всех окон" - довольно редкий usecase, а "поверх своих окон" надо часто, но почему-то это у них работает только с модальными диалогами и доквиджетами.
Насколько помню - там дело упирается в ОС

Ну, это достойный хак, думаю, получше моего (таймер нинада).
К сожалению, в любом случае все не так просто. Во-первых, не просто "поверх своих" - свои модальные окна должны быть "впереди". Во-вторых нужно отслеживать порядок (Z-order) окон чтобы восстанавливать их в обратном порядке. В Qt такого нет, пришлось нырять в нативняк 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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