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

【QT常用技术讲解】QSystemTrayIcon系统托盘

前言

        项目中需要提供窗口的服务时,就会用到系统托盘。系统托盘支持右键菜单,也支持(左下角)系统消息提醒等实用的功能。

效果图

如上,本文的讲解包括3个功能:

  • 显示消息:显示右下角的系统提醒消息;
  • 关于:弹出一个对话框,代表打开第三方应用窗口;
  • 退出:关闭系统托盘。

功能讲解

第一步,必须设置图标,不然系统图标出不来

//先创建qrc资源文件,新增图片到/目录下    //设置图标setIcon(QIcon(":/default.png"));

创建右键菜单,与MainWindow中应用窗口中的右键菜单是一样的QMenu+QAction

    //第一步:QMenu + QAction 设置菜单及功能QMenu *menu = new QMenu();QAction *showMsgAction = new QAction("显示系统提醒消息", this);QAction *aboutAction = new QAction("弹出对话框", this);QAction *quitAction = new QAction("退出", this);menu->addAction(showMsgAction);menu->addSeparator();menu->addAction(aboutAction);menu->addAction(quitAction);//第二步:把以上菜单设置为右键菜单setContextMenu(menu);//设置右键菜单//第三步:设置菜单响应的槽(函数)connectQObject::connect(showMsgAction, &QAction::triggered, [&](){showMessage("提示", "这是系统托盘消息",QSystemTrayIcon::Information, 3000);});QApplication::setQuitOnLastWindowClosed(false);//显式禁用自动退出‌connect(aboutAction, &QAction::triggered, this, &TrayIcon::showAbout);connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);

需要特别注意的是,使用自带的函数showMessage,可以直接在右下角弹出系统消息框,而使用QMessageBox弹出对话框框之前,必须如下声明,不然,当关闭QMessageBox对话框之后,就默认关闭系统托盘了。

QApplication::setQuitOnLastWindowClosed(false);//显式禁用自动退出‌

源码

//trayicon.h
#ifndef TRAYICON_H
#define TRAYICON_H#include <QObject>
#include <QSystemTrayIcon>class TrayIcon : public QSystemTrayIcon
{Q_OBJECT
public:explicit TrayIcon(QObject *parent = nullptr);void createTrayMenu();private slots:void showAbout();
private:void setpng(const QString& Path);
};#endif // TRAYICON_H
//trayicon.cpp
#include "trayicon.h"
#include <QMenu>
#include <QAction>
#include <QApplication>
#include <QMessageBox>
#include <QFile>
#include <QDir>TrayIcon::TrayIcon(QObject *parent): QSystemTrayIcon(parent)
{//设置图标setIcon(QIcon(":/default.png"));//创建右键菜单createTrayMenu();}void TrayIcon::createTrayMenu()
{QMenu *menu = new QMenu();QAction *showMsgAction = new QAction("显示系统提醒消息", this);QAction *aboutAction = new QAction("弹出对话框", this);QAction *quitAction = new QAction("退出", this);menu->addAction(showMsgAction);menu->addSeparator();menu->addAction(aboutAction);menu->addAction(quitAction);setContextMenu(menu);//设置右键菜单QObject::connect(showMsgAction, &QAction::triggered, [&](){showMessage("提示", "这是系统托盘消息",QSystemTrayIcon::Information, 3000);});QApplication::setQuitOnLastWindowClosed(false);//显式禁用自动退出‌connect(aboutAction, &QAction::triggered, this, &TrayIcon::showAbout);connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);
}void TrayIcon::showAbout()
{QMessageBox::about(nullptr, "关于", "这是对话框");
}void TrayIcon::setpng(const QString& Path){QString absPath = QDir::toNativeSeparators(Path);if(QFile::exists(absPath)) {setIcon(QIcon(absPath));setToolTip("Application Tray");} else {//qWarning() << "Icon not found:" << absPath;}
}
//main.cpp
#include <QApplication>
#include "trayicon.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);TrayIcon tray;tray.show();return app.exec();
}

http://www.xdnf.cn/news/15999.html

相关文章:

  • 大模型——Data Agent:超越 BI 与 AI 的边界
  • 跨境企业破局国际市场:海外媒体发稿如何为品牌声誉赋能?
  • 算法笔记之堆排序
  • Docker实战:使用Docker部署TeamMapper思维导图工具
  • haproxy七层代理新手入门详解
  • EasyMan 数字人服务全面焕新,交互型AI数字人助推孪生体验全新升级
  • 大模型——上下文工程如何重塑智能体的“思考方式”
  • 【接口自动化】掌握接口自动化:核心概念讲解(理论知识)
  • Qt定时器与事件循环机制
  • C#初学知识点总结
  • 牛客:最长无重复子数组
  • 西门子 S7-1500分布式 I/O通信 :PROFINET IO 与 PROFIBUS DP核心技术详解(上)
  • Axios Token 设置示例
  • 洛谷刷题7..22
  • 《计算机“十万个为什么”》之 MQ
  • 图像基础:从像素到 OpenCV 的入门指南
  • Kafka单条消息长度限制详解及Java实战指南
  • 基于python django深度学习的中文文本检测+识别,可以前端上传图片和后台管理图片
  • 更具个性的域名:解锁互联网多元价值的钥匙
  • 【Godot4】工具栏组件ToolBar
  • 金仓数据库风云
  • 基于SpringBoot+MyBatis+MySQL+VUE实现的实习管理系统(附源码+数据库+毕业论文+项目部署视频教程+项目所需软件工具)
  • c练习-c基础
  • 【计算机网络】第五章:传输层
  • 查看 iOS iPhone 设备上 App 和系统运行时的实时日志与崩溃日志
  • 单片机学习笔记.单总线one-wire协议(这里以普中开发板DS18B20为例)
  • 【测试开发】---Bug篇
  • 同步本地文件到服务器上的Docker容器
  • day60-可观测性建设-全链路监控各种客户端
  • 基于 Vue,SPringBoot开发的新能源充电桩的系统