Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: toshcka от Январь 02, 2010, 19:25



Название: QSystemTrayIcon, бага или фича?
Отправлено: 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. прошу прощения, если не туда запостил тему


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: uriel от Январь 02, 2010, 21:54
Если я всё правильно понял, то фича. Вы же ему сами сказали не выходить при закрытии окна, так с чего он должен это делать? Иконка тут в принципе вообще не при чём. :)


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: toshcka от Январь 02, 2010, 22:40
Если я всё правильно понял, то фича. Вы же ему сами сказали не выходить при закрытии окна, так с чего он должен это делать? Иконка тут в принципе вообще не при чём. :)
это для того, чтобы приложение в трэй сворачивать
я тоже склоняюсь к тому, что это фича, просто меня смутило то, что тролли в examples допустили такую ошибку, не знаю, может в 4.6 профиксили, не ставил еще :)


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: toshcka от Январь 02, 2010, 22:55
http://qt.nokia.com/doc/4.6/desktop-systray-window-cpp.html (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();
     }
 }
хотя, как я понимаю, не профиксили
обрабатывается только видимое состояние иконки, а когда она не видима, то окно приложения закрывается, но приложение остается в памяти


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: uriel от Январь 02, 2010, 23:06
Ну вообще да, в таком исполнении это уже больше похоже на баг. :)
Думаю, что там просто вызов setQuitOnLastWindowClosed явно лишний.


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: toshcka от Январь 02, 2010, 23:17
Думаю, что там просто вызов setQuitOnLastWindowClosed явно лишний.
в том-то и дело, специально проверил для надежности :)


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: lit-uriy от Январь 03, 2010, 02:18
Цитировать
В main.cpp установил QApplication::setQuitOnLastWindowClosed(false).
Но заметил проблему, при закрытии главного окна в момент, когда иконка скрыта, приложение не завершается, т.е. окно закрывается, но из памяти приложение не выгружается
проблемы НЕТ, ты сам сказал не завершать приложение при закрытии окна.


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: toshcka от Январь 03, 2010, 08:39
Цитировать
В main.cpp установил QApplication::setQuitOnLastWindowClosed(false).
Но заметил проблему, при закрытии главного окна в момент, когда иконка скрыта, приложение не завершается, т.е. окно закрывается, но из памяти приложение не выгружается
проблемы НЕТ, ты сам сказал не завершать приложение при закрытии окна.
да разобрался уже, меня сначала смутило, что в примере документации так написано, ну не думал я, что тролли допустят ошибку :)


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: Авварон от Январь 07, 2010, 03:08
90% приложений макоси не завершают свою работу при закрытии всех окон. Так что это совсем не баг


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: toshcka от Январь 08, 2010, 17:20
90% приложений макоси не завершают свою работу при закрытии всех окон. Так что это совсем не баг
а мир одной макосью живет?
что касается примера, то думаю, что это именно баг


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: aljeshishe от Январь 14, 2010, 18:24
90% приложений макоси не завершают свою работу при закрытии всех окон. Так что это совсем не баг
Интересно, что они делают после закрытия окон ? Ждут перезагрузки ? ;)

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


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: Авварон от Январь 14, 2010, 20:06
Иконка рабочего приложения висит в dock'е. По клику на ней снова открывается окно (дефолное). Это если приложение закрыто. Если захайдено, то окно восстанавливается


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: Marat(Qt) от Январь 14, 2010, 21:09
Иконка рабочего приложения висит в dock'е. По клику на ней снова открывается окно (дефолное). Это если приложение закрыто. Если захайдено, то окно восстанавливается
Между прочим, вполне неплохо бы такое реализовать в других ОС, своими руками. При вызове бинарника проверить жива ли программа, показать ее окно и выйти, если не жива - работать в обычном режиме. Есть кроссплатформенный FIFO?


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: Dendy от Январь 14, 2010, 21:14
Для Qt есть класс QtSingleApplication, делающий в точности как вы описали.


Название: Re: QSystemTrayIcon, бага или фича?
Отправлено: Marat(Qt) от Январь 14, 2010, 21:21
Для Qt есть класс QtSingleApplication, делающий в точности как вы описали.
Здорово, только стоило пометить что это solution, хотя кто ищет тот найдет