Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
05 Июнь 2024, 12:13:39
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование
(Модераторы: Админ, barmalei) > Тема:

Как в Qt отлавить минимизацию окна

Страниц  :   Вниз
  Печать  
Автор Тема: Как в Qt отлавить минимизацию окна  (Прочитано 4793 раз)
0 Пользователей и 1 Гость смотрят эту тему.
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« : 19 Март 2008, 18:49:00 »

Как в Qt отлавить минимизацию окна и убрать это окно с TaskBar-a?
Записан

HTTP Error 404 - File or directory not found.
Fastman
Гродненец
**

Репутация: +7/-0
Offline Offline

Пол: Мужской
Сообщений: 91


Ложки нет !

Просмотр профиля WWW Email
« Ответ #1 : 23 Март 2008, 14:49:31 »

Цитировать
Как в Qt отлавить минимизацию окна и убрать это окно с TaskBar-a?
отлавливать сообщение QEvent::WindowStateChange
где WindowStateChange может быть : The window's state (minimized, maximized or full-screen) has changed (QWindowStateChangeEvent).

В хелпе довольно подробно описано.
Насчет таск бара убрать, опять же читаем хелп про hide();

Записан

Знать путь и пройти его - не то же самое...
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #2 : 24 Март 2008, 20:57:32 »

Спасибо, уже сам въехал про WindowStateChange, а вот насчет TaskBar-а, вроде пробывал делать hide, но ничего не работало, буду читать help  Грустный
Еще вопрос возник, как заставить окошко выползти поверх всех окон (в WinAPI это делается выставлением свойств окна "поверх всего"), а как это в Qt провернуть незнаю.
Записан

HTTP Error 404 - File or directory not found.
maxposedon
Настоящий гродненец
****

Репутация: +26/-0
Offline Offline

Сообщений: 696


empty

Просмотр профиля
« Ответ #3 : 24 Март 2008, 21:43:31 »

enum Qt::WindowType,
enum Qt::WidgetAttribute
Записан
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #4 : 25 Март 2008, 13:06:34 »

Спасибо, буду искать.
Записан

HTTP Error 404 - File or directory not found.
Fastman
Гродненец
**

Репутация: +7/-0
Offline Offline

Пол: Мужской
Сообщений: 91


Ложки нет !

Просмотр профиля WWW Email
« Ответ #5 : 25 Март 2008, 13:19:23 »

Цитировать
Спасибо, уже сам въехал про WindowStateChange, а вот насчет TaskBar-а, вроде пробывал делать hide, но ничего не работало, буду читать help

путей много Улыбка
можно и так допустим, вот например ваше окошко

Код:
demo_window::demo_window(QWidget *parent, Qt::WFlags flags)
      : QDialog(parent, flags)
{
      ui.setupUi(this);

}

меняем на:

Код:
demo_window::demo_window(QWidget *parent, Qt::WFlags flags)
      : QDialog(parent, Qt::SubWindow)
{
      ui.setupUi(this);

}

Это как вариант....
  
Цитировать
Еще вопрос возник, как заставить окошко выползти поверх всех окон (в WinAPI это делается выставлением свойств окна "поверх всего"), а как это в Qt провернуть незнаю.
выше постом абсолютно верно указано куда копать надо Улыбка

А вообще я не понимаю чего вам надо. Если так подумать то юзер минимизировав окошко больше его не увидит Улыбка)))
В этом есть смысл только если вы в трей запихнете свое приложение. А это совсем другой разговор, и делается это просто без всяких
костылей.
« Последнее редактирование: 25 Март 2008, 13:43:15 от Fastman » Записан

Знать путь и пройти его - не то же самое...
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #6 : 25 Март 2008, 14:48:39 »

Мне хотелось, что бы при сворачивании окна появлялась иконка в трее, при этом на TaskBar-е не было самого окна (как объяснить более понятно не знаю), а после двойного щелчка по иконке окно востанавливалось (кароче говоря окно должно сворачиваться в трей и востанавливаться из него же).
Иконку и обработчик уже сделал, а как свернутое окно убрать с таскбара пока что не знаю (hide() не помог).
« Последнее редактирование: 25 Март 2008, 14:51:00 от coolasm » Записан

HTTP Error 404 - File or directory not found.
Fastman
Гродненец
**

Репутация: +7/-0
Offline Offline

Пол: Мужской
Сообщений: 91


Ложки нет !

Просмотр профиля WWW Email
« Ответ #7 : 25 Март 2008, 15:10:52 »

Цитировать
Мне хотелось, что бы при сворачивании окна появлялась иконка в трее, при этом на TaskBar-е не было самого окна (как объяснить более понятно не знаю), а после двойного щелчка по иконке окно востанавливалось (кароче говоря окно должно сворачиваться в трей и востанавливаться из него же).
Иконку и обработчик уже сделал, а как свернутое окно убрать с таскбара пока что не знаю (hide() не помог).

с этого и надо было начинать, сразу бы и помогли.. а то развел тут Улыбка))

У тебя должен быть похожий код:

Код:
void App::closeEvent(QCloseEvent *event)
{
      if (trayIcon->isVisible())
      {
            hide();
            event->ignore();
      }
}

те. когда ты жмякаешь на (x) ты перехватываешь сигнал закрытия приложения,
скрываешь приложение, и игнорируешь сам сигнал закрытия приложения.
Теперь вопрос.... что тебе мешает сделать то же самое ловя сигнал минимизации Непонимающий?

Для совсем ленивых и не читающих документацию приведу пример :

Код:
void App::changeEvent(QEvent * e )
{
            if (e->type() == QEvent::WindowStateChange)
            {
                  if (isMinimized() == true)
                        {
                                    QTimer::singleShot(0, this, SLOT(hide()));
                                    trayIcon->show();
                                    e->ignore();
                                    return;
                        }
            }
            QDialog::changeEvent( e );
}


Вроде как то так Улыбка
« Последнее редактирование: 25 Март 2008, 15:40:24 от Fastman » Записан

Знать путь и пройти его - не то же самое...
maxposedon
Настоящий гродненец
****

Репутация: +26/-0
Offline Offline

Сообщений: 696


empty

Просмотр профиля
« Ответ #8 : 25 Март 2008, 15:17:18 »

QSystemTrayIcon
« Последнее редактирование: 25 Март 2008, 15:19:46 от maxposedon » Записан
Fastman
Гродненец
**

Репутация: +7/-0
Offline Offline

Пол: Мужской
Сообщений: 91


Ложки нет !

Просмотр профиля WWW Email
« Ответ #9 : 25 Март 2008, 15:36:27 »

Я уже предвижу вопросы и просто на всякий случай еще добавлю что ессно нужно слот зарегать Улыбка))

типа:

в app.h должно быть:
Код:
private slots:
      void changeEvent(QEvent * e );

 
Блин... в QT самая охрененная дока которую я только видел... MSDN и рядом не валялся... ее ж только почитать надо Улыбка
Записан

Знать путь и пройти его - не то же самое...
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #10 : 25 Март 2008, 18:29:14 »

Как бы объяснить, это у меня уже 3 дня как работает (иконка в трее и т.д.), меня интересует как убрать с таск бара окно (оно при сворачивании в виде кнопки отабражается, а я хочу его убрать)

Может после просмотра картинки станет поняно (Total Commander - это не та прога, что я пишу)

P.S.  Насчет крутасти доков QT бессмыслено спорить, видно что постарались


* taskbar.jpg (14,18 Кб, 677x153 - просмотрено 211 раз.)
Записан

HTTP Error 404 - File or directory not found.
Fastman
Гродненец
**

Репутация: +7/-0
Offline Offline

Пол: Мужской
Сообщений: 91


Ложки нет !

Просмотр профиля WWW Email
« Ответ #11 : 25 Март 2008, 19:39:01 »

Цитировать
Как бы объяснить, это у меня уже 3 дня как работает (иконка в трее и т.д.), меня интересует как убрать с таск бара окно (оно при сворачивании в виде кнопки отабражается, а я хочу его убрать)

Может после просмотра картинки станет поняно (Total Commander - это не та прога, что я пишу)

P.S.  Насчет крутасти доков QT бессмыслено спорить, видно что постарались

Выше я написал как это сделать... копи-паст сделай Улыбка
Могу по строкам пояснить:

Заводим слот :
Код:
private slots:
      void changeEvent(QEvent * e );

Отлавливаем эвент:

Код:
void App::changeEvent(QEvent * e )
{
            if (e->type() == QEvent::WindowStateChange) //Если тип эвента изменение состояния окна идем дальше
            {
                  if (isMinimized() == true) //Если эвент - минимизация окна
                        {
                                    QTimer::singleShot(0, this, SLOT(hide())); //Прячем окошка с таск бара
                                    trayIcon->show(); //На всякий случай говорим что иконка будет видна в трее
                                    e->ignore(); //Игнорируем этот эвент основным обработчиком
                                    return; //уходим
                        }
            }
            QDialog::changeEvent( e ); //Если эвент не наш.. отдаем основному обработчику окна
}


QDialog - это если у тебя на диалоге сделано если на QMainWindow то догадаться не сложно Улыбка
все Улыбка
« Последнее редактирование: 25 Март 2008, 19:43:34 от Fastman » Записан

Знать путь и пройти его - не то же самое...
coolasm
Почетный гродненец
*****

Репутация: +102/-3
Offline Offline

Пол: Мужской
Сообщений: 1458


//---------//

Просмотр профиля
« Ответ #12 : 25 Март 2008, 20:36:40 »

Спасибо, врубился, я вызывал hide() непосредственно в обработчике changeEvent
P.S. ну не люблю я метод копи-паст, если не понимаю как работает
« Последнее редактирование: 25 Март 2008, 20:44:17 от coolasm » Записан

HTTP Error 404 - File or directory not found.
Fastman
Гродненец
**

Репутация: +7/-0
Offline Offline

Пол: Мужской
Сообщений: 91


Ложки нет !

Просмотр профиля WWW Email
« Ответ #13 : 25 Март 2008, 20:41:54 »

Цитировать
Спасибо, врубился, я вызывал hide() непосредственно в обработчике changeEvent

Всегда пожайлуста Улыбка
Аффтар пейши еще Улыбка
Записан

Знать путь и пройти его - не то же самое...
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2024, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,131 секунд. Запросов: 20.