QSystemTrayIcon系统托盘图标类

构造函数

    QSystemTrayIcon(QObject *parent = nullptr);
    QSystemTrayIcon(const QIcon &icon, QObject *parent = nullptr);
enum ActivationReason {  
    Unknown,   // 未知原因,可能表示没有明确的激活原因或者是一个未定义的状态  
    Context,   // 通常表示右键单击托盘图标(上下文菜单请求)  
    DoubleClick, // 双击托盘图标  
    Trigger,   // 通常与单击托盘图标相关,但具体行为可能依赖于操作系统和用户设置  
    MiddleClick // 中键单击托盘图标(通常是鼠标滚轮按下)  
};
Q_SIGNALS:
    void activated(QSystemTrayIcon::ActivationReason reason);
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QImage>
#include <QSystemTrayIcon>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QSystemTrayIcon *trayIcon;
    void CreateRightMenu();//右键托盘弹出菜单
protected:
    void closeEvent(QCloseEvent *e) override;
};
#endif // MAINWINDOW_H

 

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

#include <QDebug>
#include <QPaintEvent>
#include <QSystemTrayIcon>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    trayIcon = new QSystemTrayIcon(QIcon(":/img/2.png"),this);
    trayIcon->setToolTip("我的托盘");//设置提示
    CreateRightMenu();//添加托盘菜单
    trayIcon->show();//显示托盘
    //void activated(QSystemTrayIcon::ActivationReason reason);
    //点击托盘发出activated信号
//    enum ActivationReason {
//        Unknown,
//        Context,
//        DoubleClick,
//        Trigger,
//        MiddleClick
//    };

    connect(trayIcon,&QSystemTrayIcon::activated,[=](QSystemTrayIcon::ActivationReason reason){
        switch (reason) {
        case QSystemTrayIcon::DoubleClick://双击托盘图标
            qDebug()<<"666";
            break;
        case QSystemTrayIcon::Trigger://单击托盘图标弹出程序窗口
            this->setWindowState(Qt::WindowActive);//将窗口设置为活动状态
            this->activateWindow();//它将窗口带到前台,并尝试使其获得焦点。
            this->show();//显示窗口
            break;  }

    });

}

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

void MainWindow::CreateRightMenu()
{
    QMenu *pmenu= new QMenu(this);
    QAction *p1= new QAction("设置",this);
    QAction *p2= new QAction("退出",this);
    pmenu->addAction(p1);
    pmenu->addAction(p2);
    trayIcon->setContextMenu(pmenu);//默认右键菜单
}

void MainWindow::closeEvent(QCloseEvent *e)
{
    if(trayIcon->isVisible()){//如果托盘可见/有效
        this->hide();
        e->ignore();//忽略程序的关闭
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值