Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Eten от Март 24, 2013, 14:40



Название: Как грамотно реализовать закрытие программы только через трей/меню? (решено)
Отправлено: Eten от Март 24, 2013, 14:40
Всем привет, завис на простой вещи.  ???

Все никак не могу понять, как грамотно реализовать закрытие программы только через трей/меню (чтобы при нажатии на крестик окна, закрытие заменялось сворачиванием, а из трея/меню оно закрывалось)?

Понятно, что надо переопределять функцию QWidget::closeEvent(). Но тут только лишь отлавливается само событие, а не источник вызова. Поискал в классе QCloseEvent (класс передаваемого параметра) возможность определения откуда вызвано закрытие программы (от самого окна, пункта меню окна, или из пункта контекстного меню трея), но не нашел ничего путного. Есть конечно "самый простой" вариант - это добавить дополнительную переменную в класс окна, которая будет определять источник вызова окна, а есть ли способ аккуратней и грамотней?!

З.Ы.
Видел такую возможность во многих программах, но никак не понял реализации этой фишки.  ???


Название: Re: Как грамотно реализовать закрытие программы только через трей/меню
Отправлено: dio от Март 24, 2013, 16:15
Все гораздо проще:

Код:
QApplication::setQuitOnLastWindowClosed(false);




Название: Re: Как грамотно реализовать закрытие программы только через трей/меню
Отправлено: Bepec от Март 24, 2013, 17:32
Обычным делом - флагом. В closeEvent тырякаем выходить только когда флаг равен true; А true присваиваем в момент нажатия "Выход" в контекстном меню.


Название: Re: Как грамотно реализовать закрытие программы только через трей/меню
Отправлено: Alex Custov от Март 24, 2013, 20:42
такое подойдёт?

Код
C++ (Qt)
trayMenu->addAction(tr("Quit"), qApp, SLOT(quit()));
 


Название: Re: Как грамотно реализовать закрытие программы только через трей/меню
Отправлено: Eten от Март 26, 2013, 07:03
Всем спасибо заработало.  :D

З.Ы.
Последний вариант запомню на всякий случай, оригинальный подход.  ;)