【接口封装】——10、系统托盘

解释:

1、定义好按钮的状态:创建 map 映射关系,即 一个名字对应一个按钮

2、对不同按钮实现不同的信号槽函数

头文件:

#include "SysTrayIcon.h"
#include <qwidget.h>
#include "define.h"
#include "CustomMenu.h"
#include <QMenu>
#include <qmap.h>

函数定义:

创建映射关系:

public:void addMenuAction(const QString &name, const QString& icon, const QString&text);QAction*getMenuAction(const QString &name);private:QMap<QString, QAction*>map;	//菜单项集合};

实现各个按钮的显示与功能:

private:void init();void showMenu();private slots:void onIconActived(QSystemTrayIcon::ActivationReason reason);private:QWidget * parent;

源代码:

void CustomMenu::addMenuAction(const QString & name, const QString & icon, const QString & text)
{QAction* action = this->addAction(QIcon(icon), text);map.insert(name, action);
}QAction * CustomMenu::getMenuAction(const QString & name)
{return map[name];
}

 init() :

void SysTrayIcon::init()
{setToolTip("dry-QQ");	//悬浮提示语setIcon(QIcon(QQ_LOGO_ICO));connect(this,&QSystemTrayIcon::activated,this,&SysTrayIcon::onIconActived);}

onIconActived(QSystemTrayIcon::ActivationReason reason) :

void SysTrayIcon::onIconActived(QSystemTrayIcon::ActivationReason reason)
{if (reason == QSystemTrayIcon::Trigger) {//左键点击parent->show();parent->activateWindow();}else if (reason == QSystemTrayIcon::Context) {//右键点击showMenu();		}
}

showMenu() :

void SysTrayIcon::showMenu()
{CustomMenu*menu = new CustomMenu(parent);menu->addMenuAction("show", QQ_LOGO_ICO, QString::fromLocal8Bit("显示"));menu->addMenuAction("hide", SYS_TRAY_HIDE, QString::fromLocal8Bit("隐藏"));menu->addMenuAction("quit", SYS_TRAY_CLOSE, QString::fromLocal8Bit("退出"));//连接信号与槽函数connect(menu->getMenuAction("show"), SIGNAL(triggered()), parent, SLOT(onShow()));connect(menu->getMenuAction("hide"), SIGNAL(triggered()), parent, SLOT(onHide()));connect(menu->getMenuAction("quit"), SIGNAL(triggered()), parent, SLOT(onQuit()));menu->exec(QCursor::pos());		//光标位置menu->deleteLater();			//释放菜单}

函数调用:

void CCMainWindow::initSysTray()
{SysTrayIcon* icon = new SysTrayIcon(this);icon->show();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx——配置部署域名服务器路由nginx

文章目录 基本配置报错解决只能通过[域名]:[端口]/[API路径]的方式请求 基本配置 user www-data; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /run/nginx.pid;events {worker_connections 1024; }http {include /etc/nginx/mime…

C. Raspberries

time limit per test 2 seconds memory limit per test 256 megabytes You are given an array of integers a1,a2,…,ana1,a2,…,an and a number kk (2≤k≤52≤k≤5). In one operation, you can do the following: Choose an index 1≤i≤n1≤i≤n,Set aiai1aiai1. F…

Flink学习连载文章8--时间语义

Time的分类 (时间语义) EventTime:事件(数据)时间,是事件/数据真真正正发生时/产生时的时间 IngestionTime:摄入时间,是事件/数据到达流处理系统的时间 ProcessingTime:处理时间,是事件/数据被处理/计算时的系统的时间 EventTime的重要性 假设&#xff0c;你正在去往地下停…

sizeof和strlen区分,(好多例子)

sizeof算字节大小 带\0 strlen算字符串长度 \0之前

Simulink的SIL软件在环测试

以基于模型的设计&#xff08;MBD&#xff09;的软件开发时&#xff0c;需要进行SIL&#xff08;软件在环测试&#xff09;。SIL测试就是在PC上验证模型是否与代码功能一致。在项目开展中&#xff0c;用在需要将控制器生成移植到硬件前&#xff0c;把控制器的模块生成代码&…

浅谈js中onmouseleave和onmouseout的区别

同步发布于我的网站 &#x1f680; 背景介绍基本概念区别详解 无子元素的情况有子元素的情况 实际应用场景 使用 onmouseleave使用 onmouseout 注意事项总结 背景介绍 在前端开发中&#xff0c;我们经常需要为元素绑定鼠标事件&#xff0c;以实现各种交互效果。onmouseleave…

【Git系列】利用 Bash 脚本获取 Git 最后一次非合并提交的提交人

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

36 基于单片机的电磁炉系统设计

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;通过DS18B20温度传感器检测温度&#xff0c;通过八位数码管显示&#xff0c; 如果温度超过阈值&#xff0c;则蜂鸣器报警&#xff0c;红灯亮起&#xff1b;若不超过阈值&…

『 Linux 』数据链路层 - ARP协议及数据链路层周边问题

文章目录 ARP协议ARP欺骗RARP协议 DNS服务ICMP协议ping 命令正向代理服务器反向代理服务器 ARP协议 博客『 Linux 』数据链路层 - MAC帧/以太网帧中提到,当数据需要再数据链路层进行无网络传输时需要封装为MAC帧,而MAC帧的报文结构如下: 帧头部分存在两个字段分别为 “目的地址…

MySQL(数据库)

1.数据库? 数据库是管理数据(增删改查CRUD)的软件 MySQL(开源&免费) 是一个数据库软件 (客户端-服务器)结构的软件 客户端服务器通过网络进行通信 客户端(Client):主动发起请求的一方,客户端给服务器发起的数据称为请求(request) 服务器(Server):被动接受请求的一方,…

vue3----API

组合式API 1.setup 定义的数据和方法必须return出去才能够被使用 不使用this,this指向了undefined <script> export default {setup () {console.log(setup)const message this is messageconst logmessage ()>{console.log(message)}return {message,logmessag…

服务器遭受DDoS攻击后如何恢复运行?

当服务器遭受 DDoS&#xff08;分布式拒绝服务&#xff09;攻击 后&#xff0c;恢复运行需要快速采取应急措施来缓解攻击影响&#xff0c;并在恢复后加强防护以减少未来攻击的风险。以下是详细的分步指南&#xff1a; 一、应急处理步骤 1. 确认服务器是否正在遭受 DDoS 攻击 …

【maven-5】Maven 项目构建的生命周期:深入理解与应用

1. 生命周期是什么 ​在Maven出现之前&#xff0c;项目构建的生命周期就已经存在&#xff0c;软件开发人员每天都在对项目进行清理&#xff0c;编译&#xff0c;测试及部署。虽然大家都在不停地做构建工作&#xff0c;但公司和公司间&#xff0c;项目和项目间&#xff0c;往往…

【机器学习】CatBoost 模型实践:回归与分类的全流程解析

一. 引言 本篇博客首发于掘金 https://juejin.cn/post/7441027173430018067。 PS&#xff1a;转载自己的文章也算原创吧。 在机器学习领域&#xff0c;CatBoost 是一款强大的梯度提升框架&#xff0c;特别适合处理带有类别特征的数据。本篇博客以脱敏后的保险数据集为例&#x…

lua download

https://www.lua.org/ https://www.lua.org/versions.html#5.4

Java 中的 ResponseBodyEmitter:详解与实战

Java 中的 ResponseBodyEmitter&#xff1a;详解与实战 前言 在开发高并发应用或处理长时间任务时&#xff0c;服务端需要向客户端实时推送数据&#xff0c;而不是一次性将所有结果返回。Spring 提供了一种优雅的解决方案&#xff1a;ResponseBodyEmitter。它适用于需要逐步发…

基于大数据python 房屋价格数据分析预测可视化系统(源码+LW+部署讲解+数据库+ppt)

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 很对人不知道选题怎么选 不清楚自己适合做哪块内容 都可以免费来问我 避免后期給自己答辩找麻烦 增加难度&#xff08;部分学校只有一次答辩机会 没弄好就延迟…

pikachu文件上传漏洞通关详解

声明&#xff1a;文章只是起演示作用&#xff0c;所有涉及的网站和内容&#xff0c;仅供大家学习交流&#xff0c;如有任何违法行为&#xff0c;均和本人无关&#xff0c;切勿触碰法律底线 目录 概念&#xff1a;什么是文件上传漏洞一、客户端check二、MIME type三、getimagesi…

lua-cjson 例子

apt install -y lua-cjson 安装 编辑 tmp.lua cjson require "cjson" p 666 d "23.42" payload{"d":[{"pres":..(p)..,"temp":"..(d).."}]} print("payload " .. payload) j cjson.decode(payloa…

Monitor 显示器软件开发设计入门二

基础篇--显示驱动方案输出接口介绍 写在前面&#xff1a;首先申明&#xff0c;这篇文章是写给那些初入显示器软件行业的入门者&#xff0c;或是对显示器没有基本知识的小白人员。如您是行业大咖大神&#xff0c;可以绕行&#xff0c;可看后期进阶文章。 上篇介绍了输入接口及相…