Qt系统托盘--QSystemTrayIcon浅浅解析

简述
QSystemTrayIcon类为应用程序在系统托盘中提供一个图标。
现代操作系统通常在桌面上提供一个特殊的区域,称为系统托盘或通知区域,长时间运行的应用程序可以显示图标和短消息。
托盘区域
在这里插入图片描述
应用的右键目录
在这里插入图片描述

QSystemTrayIcon 中有两个比较重要的枚举
此枚举描述了系统托盘被激活的原因。
在这里插入图片描述
QSystemTrayIcon::Unknown 0 未知原因
QSystemTrayIcon::Context 1 系统托盘的上下文菜单请求
QSystemTrayIcon::DoubleClick 2 双击系统托盘
QSystemTrayIcon::Trigger 3 单击系统托盘
QSystemTrayIcon::MiddleClick 4 鼠标中键点击系统托盘

枚举QSystemTrayIcon::MessageIcon:
此枚举描述了显示气球消息时所显示的图标。
在这里插入图片描述

常量 值 描述
QSystemTrayIcon::NoIcon 0 无图标显示
QSystemTrayIcon::Information 1 一个信息图标显示
QSystemTrayIcon::Warning 2 一个标准的警告图标显示
QSystemTrayIcon::Critical 3 一个严重的警告图标显示

我简单写一个,希望可以帮到你
在这里插入图片描述
代码如下
manwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QCloseEvent>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void initTray();

private:
    void closeEvent(QCloseEvent * event);
private slots:
    void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);

private:
    Ui::MainWindow *ui;
    QSystemTrayIcon  *m_tray = nullptr;
    QMenu            *m_menu = nullptr;
    QAction          *m_min = nullptr; //最小化
    QAction          *m_max = nullptr; //最大化
    QAction          *m_restor = nullptr; //恢复
    QAction          *m_quit = nullptr; //退出
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    initTray();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::initTray()
{
    m_menu = new QMenu(this);
    QIcon icon(":/icon/file.png");
    m_tray = new QSystemTrayIcon(this);
    m_tray->setIcon(icon);
    m_tray->setToolTip("Qt托盘");
    m_min = new QAction("最小化",this);
    m_min->setIcon(QIcon(":/icon/dataicon.png"));
    connect(m_min,&QAction::triggered,this,&MainWindow::hide);

    m_max = new QAction("最大化",this);
    m_max->setIcon(QIcon(":/icon/dataicon.png"));
    connect(m_max,&QAction::triggered,this,&MainWindow::showMaximized);

    m_restor = new QAction("恢复",this);
    m_restor->setIcon(QIcon(":/icon/dataicon.png"));
    connect(m_restor,&QAction::triggered,this,&MainWindow::showNormal);

    m_quit = new QAction("退出",this);
    m_quit->setIcon(QIcon(":/icon/dataicon.png"));
    connect(m_quit,&QAction::triggered,qApp,&QApplication::quit);

    connect(m_tray,&QSystemTrayIcon::activated,this,&MainWindow::on_activatedSysTrayIcon);

    m_menu->addAction(m_min);
    m_menu->addAction(m_max);
    m_menu->addAction(m_restor);
    m_menu->addSeparator(); //分割
    m_menu->addAction(m_quit);
    m_tray->setContextMenu(m_menu);
    m_tray->show();

    connect(m_tray,&QSystemTrayIcon::messageClicked,this, [=]{
        qDebug()<<"messageClicked===";
    });
}

void MainWindow::closeEvent(QCloseEvent * event)
{

   if(m_tray->isVisible())
   {
       this->hide();
        m_tray->showMessage( tr("Qt"), tr("Qt托盘 消息提示"), QSystemTrayIcon::Information, 3*1000);
       event->ignore();
   }
   else {
       event->accept();
   }

}

void MainWindow::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
{
    switch (reason) {

    case QSystemTrayIcon::Trigger:
        break;
    case QSystemTrayIcon::DoubleClick:
        this->show();
        break;
    default:
        break;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值