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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отследить что окно(QWidget) скрылось  (Прочитано 3363 раз)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« : Октябрь 19, 2012, 09:58 »

Про всякие там isVisible() я уж конечно вкурсе Улыбающийся Есть следующая проблема например у юзверя стоит винда и он использует тему aero, естественно окна со свистелками\пирделками сворачиваются и разворачиваются. Но возникает вопрос как отловить конец анимации окна ? То есть мне нужен функционал примерно такой, показать окно только после того как первое свернулось, причем полностью, расчитать время анимации я конечно же не могу, может там еще какая шайтан тема стоять будет, где окно в два раза дольше сворачивается. QWidget::isVisible() возвращает false сразу после того как вызвали QWidget::hide(). Вот и возникает вопрос как отловить что окна не видно на экране ? Я попробовал извратиться и сделать так

Код:
    mainwindow->hide();
    QEventLoop loop;
    while(mainToolWidget()->isVisible()) {}
    QTimer::singleShot(0,&loop,SLOT(quit()));
    loop.exec();
    needwindow->show();

но стало быть это и не работает как раз из за isVisible.

« Последнее редактирование: Октябрь 19, 2012, 10:55 от ecspertiza » Записан
Bepec
Гость
« Ответ #1 : Октябрь 19, 2012, 10:21 »

Без платформозависимого кода - никак.

Насколько я помню, свистелки-перделки дело рук оконного менеджера. Соответственно поймать момент скрытия без платформозависимого кода нельзя.

PS есть так же интересные прожки типа доп рабочих столов. Когда окно вроде скрыто, а на другом столе спокойно стоит Веселый
Записан
Serr500
Гость
« Ответ #2 : Октябрь 19, 2012, 11:23 »

показать окно только после того как первое свернулось
Это так необходимо?
Соответственно поймать момент скрытия без платформозависимого кода нельзя.
Там и платформозависимым ловить нечего. Насколько мне известно, винда не сообщает о запуске/завершении анимации окна. Максимум что можно сделать - вычитать из реестра время сворачивания/разворачивания и сделать задержку.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Октябрь 19, 2012, 11:35 »

Это так необходимо?

Да, программа делает скрин с экрана, и если вызвать функцию скрина из главного окна, то половина окна видна на скрине, это как то совсем не гуд Улыбающийся Мысль с задержкой кажется не плохой, но откуда из реестра можно прочитать инфу о скорости анимации ?
Записан
Serr500
Гость
« Ответ #4 : Октябрь 19, 2012, 12:45 »

ХЗ где она там. Не могу сказать. Я бы поставил твикер типа TuneUp, поменял значение, а затем посмотрел бы, что изменилось в реестре.
Записан
Bepec
Гость
« Ответ #5 : Октябрь 19, 2012, 13:11 »

В принципе можно порыскать по реестрам и функциям.
Месяца 2 назад натыкался в интернете на компонент, реализующий красивый уход с экрана с winApi - мб там что то такое и было. В общем поищу.

update: нашёл, правда там использовался мини-костыль. Точнее аналогия с winApi.

Интересный факт: При нажатии иконки свернуть всё, все окна сворачиваются без анимации.

Полезный факт: по заверениям той темы, windows передвигает desktop вверх на его размер, затем вызывая minimize у окон.

Вывод: если не получится сделать как хочется(узнать время сворачивания), можно сделать костылёк - двигать окно за пределы экрана, делать скриншот, минимизировать.
« Последнее редактирование: Октябрь 19, 2012, 13:18 от Bepec » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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