QT Creator: сворачиваем приложение в трей

Создадим минимальное приложение, которое при закрытии будет сворачиваться в трей, а при нажатии на иконку приложения, показывает пункты меню «показать» и «выйти».

form1.h:

#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:

#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;
}

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.