QT Creator: сворачиваем приложение в трей
Создадим минимальное приложение, которое при закрытии будет сворачиваться в трей, а при нажатии на иконку приложения, показывает пункты меню «показать» и «выйти».
form1.h:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#ifndef FORM1_H #define FORM1_H #include <QMainWindow> #include <QCloseEvent> #include <QSystemTrayIcon> #include <QAction> #include <QMenu> namespace Ui { class Form1; } class Form1 : public QMainWindow { Q_OBJECT public: explicit Form1(QWidget *parent = nullptr); ~Form1(); protected: void closeEvent(QCloseEvent * event); private slots: // событие нажатия на иконку в трее void iconActivated(QSystemTrayIcon::ActivationReason reason); private: Ui::Form1 *ui; QSystemTrayIcon * trayIcon; }; #endif // FORM1_H |
form1.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include "form1.h" #include "ui_form1.h" Form1::Form1(QWidget *parent) : QMainWindow(parent), ui(new Ui::Form1){ ui->setupUi(this); trayIcon = new QSystemTrayIcon(this); trayIcon->setIcon(this->style()->standardIcon(QStyle::SP_DirHomeIcon)); trayIcon->setToolTip(trUtf8("SBSS \n уведомление о тикетах")); /* После чего создаем контекстное меню из двух пунктов*/ QMenu * menu = new QMenu(this); QAction * viewWindow = new QAction(trUtf8("Развернуть окно"), this); QAction * quitAction = new QAction(trUtf8("Выход"), this); connect(viewWindow, SIGNAL(triggered()), this, SLOT(show())); connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); menu->addAction(viewWindow); menu->addAction(quitAction); trayIcon->setContextMenu(menu); trayIcon->show(); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); } // обработка события закртытия формы void Form1::closeEvent(QCloseEvent * event){ if(this->isVisible()){ event->ignore(); //свой обработчик события this->hide(); // гасим форму QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::MessageIcon(QSystemTrayIcon::Information); // задаем иконку сообщения trayIcon->showMessage(trUtf8("Приложение в трее"), trUtf8("Приложение свернуто в трей. Для того чтобы,развернуть окно приложения, щелкните по иконке приложения в трее"), icon, 2000); //показываем сообщение }; } // событие - щелкнули по иконке в трее void Form1::iconActivated(QSystemTrayIcon::ActivationReason reason){ if(!this->isVisible()){ this->show();} else {this->hide();} } Form1::~Form1(){ delete ui; } |