Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Октябрь 12, 2016, 14:34



Название: Как поймать showEvent и hideEvent для немодального (не главного) окна
Отправлено: xintrea от Октябрь 12, 2016, 14:34
Столкнулся с такой проблемой.

Есть главное окно программы, и есть виджет(ы), которые открыты как немодальные окна. Необходимо в этих виджетах поймать события скрытия/появления, если скрывается/появляется главное окно.

Выяснилось, что как минимум в Windows, события showEvent и hideEvent для таких QWidget не генерируются. Единственный
случай, когда генерируется событие showEvent (но не hideEvent) - это когда немодальный виджет активен при клике на панели по главному окну, чтобы оно свернулось. Для неактивных немодальных виджетов вообще showEvent и hideEvent не генерируются.

Вопрос: как таки поймать эти события?



Название: Re: Как поймать showEvent и hideEvent для немодального (не главного) окна
Отправлено: Igors от Октябрь 13, 2016, 06:50
Вопрос: как таки поймать эти события?
show/hide не относится к свертке/развертке, т.е. "свернутые" окна по-прежнему считаются видимыми. Поэтому ловите QWindowStateChangeEvent


Название: Re: Как поймать showEvent и hideEvent для немодального (не главного) окна
Отправлено: xintrea от Октябрь 14, 2016, 19:53
> show/hide не относится к свертке/развертке, т.е. "свернутые" окна по-прежнему считаются видимыми. Поэтому ловите QWindowStateChangeEvent

Оказывается. не все так просто, в  разных системах по-разному. И никакого "свернутые" окна по-прежнему считаются видимыми" нет.

В Windows hideEvent/showEvent не генерируется для немодальных окон, но генерируются для основного окна. Это похоже на баг.

В Linux в KDE hideEvent/showEvent генерируется и для немодальных окон, и генерируются для основного окна.


Название: Re: Как поймать showEvent и hideEvent для немодального (не главного) окна
Отправлено: Igors от Октябрь 15, 2016, 08:20
И никакого "свернутые" окна по-прежнему считаются видимыми" нет.
Есть или нет - это не тот вопрос который решается голосованием :) Ведь можно просто посмотреть (см аттач).

..в  разных системах по-разному. ..

В Windows hideEvent/showEvent не генерируется для немодальных окон, но генерируются для основного окна. Это похоже на баг.

В Linux в KDE hideEvent/showEvent генерируется и для немодальных окон, и генерируются для основного окна.
Это называется "пополнить багаж бесполезных знаний" :) Вам нужно отловить момент свертки/развертки - ну так ответ уже прозвучал