Qt笔记(二十四)之系统托盘QSystemTrayIcon

104 篇文章 128 订阅

一.前言
工作中,有些用户喜欢点击最小化的时候,软件图标显示到右下角(系统托盘),并想增加一些菜单,双击又还原窗口,故此把系统托盘功能单独拿出来,以此做个记录
二.实现过程
1.核心是利用Qt提供的QSystemTrayIcon
2.核心代码,附带注释

#include "widget.h"
#include "ui_widget.h"

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

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

void Widget::on_pushButton_clicked()
{
    systemIcon = new QSystemTrayIcon();

    // 设置提示语
    systemIcon->setToolTip("这是系统系统图标");

    // 设置图标
    systemIcon->setIcon(QIcon("://Icon.png"));

    // 增加托盘菜单
    QMenu *menu = new QMenu();
    QAction *a1 = new QAction("菜单1");
    QAction *a2 = new QAction("菜单2");
    menu->addAction(a1);
    menu->addAction(a2);
    systemIcon->setContextMenu(menu);
    connect(a1,SIGNAL(triggered(bool)),this,SLOT(onA1(bool)));
    connect(a2,SIGNAL(triggered(bool)),this,SLOT(onA2(bool)));

    // 关联拖盘事件
    connect(systemIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(onActivated(QSystemTrayIcon::ActivationReason)));

    //
    systemIcon->show();

    // 要在show之后调用
    systemIcon->showMessage("showMessage","系统托盘提示",QSystemTrayIcon::MessageIcon::Information,500);
}

void Widget::onActivated(QSystemTrayIcon::ActivationReason action)
{
    qDebug()<<action;
    if(action==QSystemTrayIcon::ActivationReason::Unknown){
        qDebug()<<"未知点击";
    }
    else if(action==QSystemTrayIcon::ActivationReason::Context || action==QSystemTrayIcon::ActivationReason::Trigger){
        qDebug()<<"鼠标单击";
    }
    else if(action==QSystemTrayIcon::ActivationReason::DoubleClick){
        qDebug()<<"鼠标双击";
    }
    else if(action==QSystemTrayIcon::ActivationReason::MiddleClick){
        qDebug()<<"鼠标中间单击";
    }else{
        return;
    }
}

void Widget::onA1(bool b)
{
    qDebug()<<"这是菜单1";
}

void Widget::onA2(bool b)
{
    qDebug()<<"这是菜单2";
}

3.效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三.源码下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值