当前位置: 首页 > news >正文

Qt应用系统托盘区域显示、托盘菜单示例

头文件包含:

#include <QSystemTrayIcon>  //托盘类
#include <QDesktopServices> //桌面事件类
#include "QAction"
#include "QMenu"
#include "QCloseEvent"

函数声明和对象定义:

QMenu *trayMenu;//托盘菜单
QSystemTrayIcon *tray;//托盘图标添加成员
QAction *minimizeAction;
QAction *maximizeAction;
QAction *restoreAction;
QAction *quitAction;
void closeEvent(QCloseEvent *event);
void hideEvent(QHideEvent *event);

初始化:

tray= new QSystemTrayIcon(this);//初始化托盘对象tray
tray->setIcon(QIcon(QPixmap(":/pic.ico").scaled(40, 40)));//设定托盘图标,引号内是自定义的png图片路径
tray->setToolTip("TIPS"); //提示文字
tray->show();//让托盘图标显示在系统托盘上

//托盘图标右键显示菜单
minimizeAction = new QAction("MinWin", this);
maximizeAction = new QAction("MaxWin", this);
restoreAction = new QAction("restore", this);
quitAction = new QAction("exit", this);
trayMenu = new QMenu(this);
trayMenu->addAction(minimizeAction);
trayMenu->addAction(maximizeAction);
trayMenu->addAction(restoreAction);
trayMenu->addSeparator();
trayMenu->addAction(quitAction);
tray->setContextMenu(trayMenu);

connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide()));
connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()));
connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));

函数实现:


void Widget::iconActivated(QSystemTrayIcon::ActivationReason ireason)
{
    switch (ireason)
    {
        case QSystemTrayIcon::Trigger:
            this->showNormal();
            break;
        case QSystemTrayIcon::DoubleClick:
            this->showNormal();
            break;
        case QSystemTrayIcon::MiddleClick:
            break;
        default:
            break;
    }
}

//点击右上角关闭按钮,弹出对话框
void Widget::closeEvent(QCloseEvent *event)
{
    if(tray->isVisible())
    {
        QMessageBox MBox;
        MBox.setWindowTitle("关闭");
        MBox.setText("关闭或最小化到右下角托盘区域?");
        MBox.setIconPixmap(QPixmap(":/pic.ico").scaled(100, 100));
        QPushButton *btn_close = MBox.addButton("关闭", QMessageBox::AcceptRole);
        QPushButton *btn_min = MBox.addButton("最小化", QMessageBox::AcceptRole);
        QPushButton *btn_cancle = MBox.addButton("取消", QMessageBox::AcceptRole);

        MBox.exec();
        if (MBox.clickedButton() == (QAbstractButton*)btn_close)
        {
            quitAction->trigger();
            event->ignore();
        }
        else if(MBox.clickedButton() == (QAbstractButton*)btn_min)
        {

            hide();
            event->ignore();
        }
        else if(MBox.clickedButton() == (QAbstractButton*)btn_cancle)
        {
            event->ignore();
        }
    }
}

void Widget::hideEvent(QHideEvent *event)
{
    if(tray->isVisible())
    {
        hide(); //隐藏窗口
        event->ignore(); //忽略事件
    }
}


在这里插入图片描述

相关文章:

  • 快速排序不啦不啦
  • 嵌入式Linux网络编程:UNIX Domain Socket进程间通信(IPC)
  • Maven版本统一管理
  • 如何在Webpack中配置别名路径?
  • Google开源机器学习框架TensorFlow探索更多ViT优化
  • Ubuntu 系统无法远程连接?完整排查指南与解决方案
  • RedHat7.6_x86_x64服务器(最小化安装)搭建使用记录(二)
  • 51c自动驾驶~合集15
  • Modbus协议开发入门
  • LangChain基础系列之LLM接口详解:从原理到实战的全攻略
  • OSI 七层模型和四层模型(TCP/IP 模型)
  • 基于深度神经网络的图像防篡改检测方法研究
  • 无人驾驶汽车与智能化煤矿的发展对比及启示:技术革命下的产业升级路径
  • DeepSeek算法研发闭环解析:如何打造持续进化的AI生产线?
  • C# MemoryStream 使用详解
  • 爬虫的第三天——爬动态网页
  • ubuntu服务器进程启动失败的原因分析
  • LabVIEW医疗设备故障智能诊断系统
  • 智能网联交通加速落地,光路科技TSN技术助推车路云一体化发展
  • 电脑连不上手机热点会出现的小bug
  • 俄土外长通话讨论俄乌谈判问题
  • 从600名外到跻身大满贯,孙发京:走过的路成就了现在的我
  • 旭辉控股集团主席林中:债务重组是活下来的前提,自营开发业务收缩至少数核心城市
  • 金科股份重整方案通过,正式进入重整计划执行环节
  • 中拉论坛第四届部长级会议将举行,外交部介绍情况
  • 普京提议于15日在土耳其恢复俄乌直接谈判