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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Minimize System Tray  (Прочитано 7598 раз)
spectre71
Гость
« : Сентябрь 04, 2009, 09:38 »

Кто-нибудь знает как сделать минимизацию приложения в System Tray и восстановление его обратно?
1) Через QSystemTrayIcon создаем иконку в System Tray, с этим все просто
2) При нажатии кнопки "Minimize" на "Title Bar", окно программы должно минимизироваться и должна исчезнуть кнопка для приложения из панели задач.
3) При щелчке на иконке в System Tray состояние окна должно быть восстановлено и оно должно быть переведено на передний план(на передний план окно переводиться и в случае когда оно не минимизировано)
4) Необходима адекватная работа под Windows, Mac и Linux
Записан
BaltikS
Гость
« Ответ #1 : Сентябрь 04, 2009, 10:22 »

Могу только посоветовать поймать событие WindowStateChange и проверить WindowState == Qt::WindowMinimized далее сделать hide(). А дальше как в примере про SystemTray...
« Последнее редактирование: Сентябрь 04, 2009, 10:23 от BaltikS » Записан
BaltikS
Гость
« Ответ #2 : Сентябрь 04, 2009, 10:46 »

Доработал пример с треем. Добавляем новый эвент в форму...
Код:
void Window::changeEvent ( QEvent * event )
{
if (event->type() == QEvent::WindowStateChange)
{
if (windowState() == Qt::WindowMinimized)
qApp->postEvent(this, new QCloseEvent());
}
}
Также для проверки был изменён тип окна с QDialog на QWidget...  . В винде проверялось - работает.
Записан
spectre71
Гость
« Ответ #3 : Сентябрь 05, 2009, 08:46 »

Могу только посоветовать поймать событие WindowStateChange и проверить WindowState == Qt::WindowMinimized далее сделать hide(). А дальше как в примере про SystemTray...
К сожалению под Lunix - hide() не помогает, кнопка из панели задач не исчезает!
Записан
BlackTass
Гость
« Ответ #4 : Сентябрь 05, 2009, 08:57 »

Да, с линуксом есть проблемы в этом плане (насколько мне известно проявляется только в кедах, на гноме когда проверяли все аккуратно сворачивалось в трей).
Записан
Rcus
Гость
« Ответ #5 : Сентябрь 05, 2009, 09:13 »

Хм, странно... посмотрел KDE приложения - нормально они в трей сворачиваются: все сводится к переопределению closeEvent и вызовам hide(); e->ignore();
UPD: хм, сначала подумал что что-то я не то сказал, но все же это работает и с QEvent::WindowStateChange
« Последнее редактирование: Сентябрь 05, 2009, 09:26 от Rcus » Записан
spectre71
Гость
« Ответ #6 : Сентябрь 05, 2009, 09:26 »

Хм, странно... посмотрел KDE приложения - нормально они в трей сворачиваются: все сводится к переопределению closeEvent и вызовам hide(); e->ignore();

Под Windows и Mac - работает.
Под "CentOs"/"Gnome" - из панели задач не исчезает.
Под KDE - не проверял

Код
C++ (Qt)
void sb_pipeline2::changeEvent(QEvent * event) {
 if(event->type() == QEvent::ActivationChange) {    
   if(isVisible() && isMinimized()) {
     event->ignore();
     hide();
     return;
   }
 }
 QMainWindow::changeEvent(event);
}
« Последнее редактирование: Сентябрь 05, 2009, 09:28 от Spectre » Записан
BlackTass
Гость
« Ответ #7 : Сентябрь 05, 2009, 19:10 »

Код:
void MainWindow::changeEvent (QEvent *event)
{
    if ((event->type() == QEvent::WindowStateChange) &&
        isMinimized() &&
        systemTrayIcon->isVisible() &&)
    {
        QTimer::singleShot(0, this, SLOT(hide()));
        event->ignore();
    }
    else
        QMainWindow::changeEvent(event);
}

Это работает под виндой, под гномом (сам не проверял правда, но заказчик утверждает что у него работает), а под кедами все равно остается при минимизации в таскбаре.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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