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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSystemTrayIcon, бага или фича?  (Прочитано 8987 раз)
toshcka
Гость
« : Январь 02, 2010, 19:25 »

Баловался с phonon и писал плеер, создал иконку в трее и возможность ее скрыть посредством чекбокса. В main.cpp установил QApplication::setQuitOnLastWindowClosed(false).
Но заметил проблему, при закрытии главного окна в момент, когда иконка скрыта, приложение не завершается, т.е. окно закрывается, но из памяти приложение не выгружается. (ну и музыка играет Улыбающийся )
Решил проблему, обрабатывая QCloseEvent.
Код:
MainwWindow::closeEvent(QCloseEvent * event)
{
event->accept()
if (!trayIcon->isVisible())
     qApp->quit(); //ну или exitAction->trigger(), это по-вашему усмотрению :)
}
При этом в examples/desktop/systray тоже наблюдается такая проблема

так бага это или фича?

qt 4.5.2
Linux

ps. прошу прощения, если не туда запостил тему
« Последнее редактирование: Январь 02, 2010, 19:34 от toshcka » Записан
uriel
Гость
« Ответ #1 : Январь 02, 2010, 21:54 »

Если я всё правильно понял, то фича. Вы же ему сами сказали не выходить при закрытии окна, так с чего он должен это делать? Иконка тут в принципе вообще не при чём. Улыбающийся
Записан
toshcka
Гость
« Ответ #2 : Январь 02, 2010, 22:40 »

Если я всё правильно понял, то фича. Вы же ему сами сказали не выходить при закрытии окна, так с чего он должен это делать? Иконка тут в принципе вообще не при чём. Улыбающийся
это для того, чтобы приложение в трэй сворачивать
я тоже склоняюсь к тому, что это фича, просто меня смутило то, что тролли в examples допустили такую ошибку, не знаю, может в 4.6 профиксили, не ставил еще Улыбающийся
Записан
toshcka
Гость
« Ответ #3 : Январь 02, 2010, 22:55 »

http://qt.nokia.com/doc/4.6/desktop-systray-window-cpp.html
Код:
 void Window::closeEvent(QCloseEvent *event)
 {
     if (trayIcon->isVisible()) {
         QMessageBox::information(this, tr("Systray"),
                                  tr("The program will keep running in the "
                                     "system tray. To terminate the program, "
                                     "choose <b>Quit</b> in the context menu "
                                     "of the system tray entry."));
         hide();
         event->ignore();
     }
 }
хотя, как я понимаю, не профиксили
обрабатывается только видимое состояние иконки, а когда она не видима, то окно приложения закрывается, но приложение остается в памяти
« Последнее редактирование: Январь 02, 2010, 22:57 от toshcka » Записан
uriel
Гость
« Ответ #4 : Январь 02, 2010, 23:06 »

Ну вообще да, в таком исполнении это уже больше похоже на баг. Улыбающийся
Думаю, что там просто вызов setQuitOnLastWindowClosed явно лишний.
Записан
toshcka
Гость
« Ответ #5 : Январь 02, 2010, 23:17 »

Думаю, что там просто вызов setQuitOnLastWindowClosed явно лишний.
в том-то и дело, специально проверил для надежности Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Январь 03, 2010, 02:18 »

Цитировать
В main.cpp установил QApplication::setQuitOnLastWindowClosed(false).
Но заметил проблему, при закрытии главного окна в момент, когда иконка скрыта, приложение не завершается, т.е. окно закрывается, но из памяти приложение не выгружается
проблемы НЕТ, ты сам сказал не завершать приложение при закрытии окна.
Записан

Юра.
toshcka
Гость
« Ответ #7 : Январь 03, 2010, 08:39 »

Цитировать
В main.cpp установил QApplication::setQuitOnLastWindowClosed(false).
Но заметил проблему, при закрытии главного окна в момент, когда иконка скрыта, приложение не завершается, т.е. окно закрывается, но из памяти приложение не выгружается
проблемы НЕТ, ты сам сказал не завершать приложение при закрытии окна.
да разобрался уже, меня сначала смутило, что в примере документации так написано, ну не думал я, что тролли допустят ошибку Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Январь 07, 2010, 03:08 »

90% приложений макоси не завершают свою работу при закрытии всех окон. Так что это совсем не баг
Записан
toshcka
Гость
« Ответ #9 : Январь 08, 2010, 17:20 »

90% приложений макоси не завершают свою работу при закрытии всех окон. Так что это совсем не баг
а мир одной макосью живет?
что касается примера, то думаю, что это именно баг
Записан
aljeshishe
Гость
« Ответ #10 : Январь 14, 2010, 18:24 »

90% приложений макоси не завершают свою работу при закрытии всех окон. Так что это совсем не баг
Интересно, что они делают после закрытия окон ? Ждут перезагрузки ? Подмигивающий

toshcka
В зависимости от чекбокса включающего или выключающего иконку  делаешь
setQuitOnLastWindowClosed(false) и выключаешь иконку
или
setQuitOnLastWindowClosed(true) и выключаешь иконку
ТОгда приложение завершится если нет иконки
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #11 : Январь 14, 2010, 20:06 »

Иконка рабочего приложения висит в dock'е. По клику на ней снова открывается окно (дефолное). Это если приложение закрыто. Если захайдено, то окно восстанавливается
Записан
Marat(Qt)
Гость
« Ответ #12 : Январь 14, 2010, 21:09 »

Иконка рабочего приложения висит в dock'е. По клику на ней снова открывается окно (дефолное). Это если приложение закрыто. Если захайдено, то окно восстанавливается
Между прочим, вполне неплохо бы такое реализовать в других ОС, своими руками. При вызове бинарника проверить жива ли программа, показать ее окно и выйти, если не жива - работать в обычном режиме. Есть кроссплатформенный FIFO?
Записан
Dendy
Гость
« Ответ #13 : Январь 14, 2010, 21:14 »

Для Qt есть класс QtSingleApplication, делающий в точности как вы описали.
Записан
Marat(Qt)
Гость
« Ответ #14 : Январь 14, 2010, 21:21 »

Для Qt есть класс QtSingleApplication, делающий в точности как вы описали.
Здорово, только стоило пометить что это solution, хотя кто ищет тот найдет
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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