Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Racheengel от Ноябрь 16, 2018, 19:08



Название: Окно поверх приложения
Отправлено: Racheengel от Ноябрь 16, 2018, 19:08
Всем Привет,

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

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

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


Название: Re: Окно поверх приложения
Отправлено: Racheengel от Ноябрь 17, 2018, 02:22
В общем сделал хак: запускаю в окне таймер и пару раз в секунду вызываю raise().
В принципе работает, дешево и сердито. Но как-то криво, нельзя ли поумнее :(


Название: Re: Окно поверх приложения
Отправлено: Igors от Ноябрь 17, 2018, 03:57
Флаг Qt::WindowStaysOnTopHint делает окно поверх вообще всех приложений, что не нужно.
"не нужно" - не то выражение, это просто хреново :)

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


Название: Re: Окно поверх приложения
Отправлено: Racheengel от Ноябрь 19, 2018, 12:36
Я сделал чуть другой хак: по сигналу активации приложения выставляю/сбрасываю WindowStaysOnTopHint, тоже не блеск, но лучшего не видно

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

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


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

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