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

【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.dtcms.com/a/292764.html

相关文章:

  • cuda做lut 去畸变示例
  • APT32F1732RBT8爱普特微电子 32位MCU国产芯片 智能家居/工业控制 首选
  • 【Word Press基础】创建一个自定义区块
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(7):自動詞 & 他動詞
  • Matlab学习笔记:矩阵基础
  • 鸿蒙卡片开发保姆级教程
  • 【Kubernetes】集群外使用 kubectl 命令连接集群
  • 数据结构 之 【排序】(直接选择排序、堆排序、冒泡排序)
  • LS-DYNA | 载荷与边界条件
  • 内网穿透利器:基于HTTPHTTPS隧道的代理工具深度解析
  • Monkey OCR简单介绍
  • 为什么要微调大语言模型
  • 高等数学-矩阵知识
  • rocky9-zabbix简单部署
  • 如何实战适配政务服务智能体中台?
  • 中烟创新灯塔大模型应用开发平台入选工信部“政务大模型应用典型案例”
  • 【Android】xml和Java两种方式实现发送邮件页面
  • 在Python中操作Word
  • 嵌入式学习-土堆目标检测(3)-day27
  • Python 综合运用:MD 转 DOCX 工具
  • 上网行为管理知识
  • 054_TreeMap / LinkedHashMap
  • 小程序上传头像解析
  • numpy库 降维,矩阵创建与元素的选取,修改
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘Cython’问题
  • Protobuf学习
  • SDC命令详解:使用set_min_library命令进行约束
  • fuse低代码工作流平台概述【已开源】-自研
  • AWS: 云上侦探手册,七步排查ALB与EC2连接疑云
  • Kotlin调试