「Qt Widget中文示例指南」如何实现一个系统托盘图标?(一)

news/2024/9/17 7:21:34/ 标签: qt, 开发语言, c++, 界面控件, UI开发

Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。

System Tray Icon(系统托盘图标)示例展示了如何将带有菜单和弹出消息的图标添加到桌面环境的系统托盘中。

「Qt Widget中文示例指南」如何实现一个系统托盘图标?

系统托盘图标的截图

点击获取Qt Widget组件下载

现代操作系统通常在桌面上提供一个特殊的区域,称为系统托盘或通知区域,长时间运行的应用程序可以在这里显示图标和短消息。

本实例由一个类Window组成,它提供了主应用程序窗口(即系统托盘图标的编辑器)和相关图标。

「Qt Widget中文示例指南」如何实现一个系统托盘图标?

编辑器允许用户选择首选图标以及设置气球消息的类型和持续时间,用户还可以编辑消息的标题和正文。最后,编辑器提供了一个复选框,控制图标是否实际显示在系统托盘中。

Window类定义

Window类继承了QWidget:

class Window : public QDialog
{
Q_OBJECTpublic:
Window();void setVisible(bool visible) override;protected:
void closeEvent(QCloseEvent *event) override;private slots:
void setIcon(int index);
void iconActivated(QSystemTrayIcon::ActivationReason reason);
void showMessage();
void messageClicked();private:
void createIconGroupBox();
void createMessageGroupBox();
void createActions();
void createTrayIcon();QGroupBox *iconGroupBox;
QLabel *iconLabel;
QComboBox *iconComboBox;
QCheckBox *showIconCheckBox;QGroupBox *messageGroupBox;
QLabel *typeLabel;
QLabel *durationLabel;
QLabel *durationWarningLabel;
QLabel *titleLabel;
QLabel *bodyLabel;
QComboBox *typeComboBox;
QSpinBox *durationSpinBox;
QLineEdit *titleEdit;
QTextEdit *bodyEdit;
QPushButton *showMessageButton;QAction *minimizeAction;
QAction *maximizeAction;
QAction *restoreAction;
QAction *quitAction;QSystemTrayIcon *trayIcon;
QMenu *trayIconMenu;
};

我们实现了几个私有槽来响应用户交互,其他私有函数只是为了简化构造函数而提供的方便函数。

托盘图标是QSystemTrayIcon类的一个实例,要检查用户桌面上是否存在系统托盘,请调用静态QSystemTrayIcon::isSystemTrayAvailable()函数。与图标相关联,我们提供了一个菜单,其中包含典型的最小化、最大化、恢复和退出操作。我们重新实现了QWidget::setVisible()函数,以便在编辑器的外观发生变化时更新托盘图标的菜单,例如,在最大化或最小化主应用程序窗口时。

最后,我们重新实现QWidget的closeEvent()函数,以便能够通知用户(在关闭编辑器窗口时),该程序将继续在系统托盘中运行,直到用户选择图标上下文菜单中的Quit条目。

Qt Widget组件推荐
  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!

http://www.ppmy.cn/news/1522490.html

相关文章

基础学习之——Apache Spark

Apache Spark是一种开源的大数据处理框架,它提供了快速、通用和可扩展的大数据分析和处理功能。Spark可以在大规模数据集上进行高速计算,并且可以与多种数据源和工具进行集成。 Spark的基本概念包括: 弹性分布式数据集(Resilient…

【LeetCode 121】买卖股票的最佳时机

1. 题目 2. 分析 如果当前的价格比之前买入的价格要低,那么我们就“逢低买入”,更新买入的价格,因为在此后的每一天里,当前的价格与之前的买入价格相比是更优解。 如果读者对单调队列有接触,可以看到这一步的核心思想…

iOS P8证书推送测试

最近在配合服务端人员调试相关的 APNS auth key 推送的问题,相比于苹果的P12证书的推送,P8证书的推送显得方便很多,P8的优势在于简单,安全 容易生成 最重要的是不会过期。 现在我们来看下测试具体流程: 方法一 地址…

掌握Hive函数[1]:从基础到高级应用

目录 函数简介 单行函数 算术运算函数 数值函数 字符串函数 日期函数 流程控制函数 集合函数 案例演示 函数简介 Hive将常用的逻辑封装成函数供用户使用,类似于Java中的函数。这样做的好处是可以避免用户反复编写相同的逻辑代码,可以直接调用这些函数。…

2024 RustChinaConf 赞助商介绍

2024 RustChinaConf 得到了行业各界的广泛支持,在此向以下赞助商表示感谢! 非凸科技 非凸科技是一家全栈使用Rust的金融科技公司,致力于为券商、私募、公募等金融机构及个人投资者提供一站式数智交易领域服务解决方案。作为本次大会的钻石赞助…

jmeter之ForEach控制器使用

ForEach控制器作用: 一般和用户自定义变量或者正则表达式提取器配合使用,读取返回结果中一系列相关的变量值,该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值(类似python当中的for语句,用来遍历操作) 本节代码已上…

币安/欧易合约对冲APP系统开发

币安合约对冲系统开发是一个复杂且专业的过程,它涉及到多个方面的技术和策略。以下是对币安合约对冲系统开发的一个概述: 一、系统概述 币安合约对冲系统是一种利用币安交易所提供的合约交易功能,通过同时建立多头和空头仓位来减少或消除市…

hutool 集合相关交集、差集

开发过程中会遇到集合之间的对比之类的需求&#xff0c;之前经常会自己写个工具类来实现&#xff0c;目前hutool可以帮助我们解决很多问题&#xff0c;接下来我们就来实践下。 相关jar包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool…

Python办公自动化案例

文章目录 系列文章办公自动化案例案例1&#xff1a;批量重命名文件案例2&#xff1a;Excel数据自动筛选案例3&#xff1a;PDF文件合并案例4&#xff1a;批量发送电子邮件案例5&#xff1a;日程安排提醒案例6&#xff1a;CSV文件数据统计案例7&#xff1a;Word文档生成案例8&…

Day18_0.1基础学习MATLAB学习小技巧总结(18)——MATLAB绘图篇(1)

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍&#xff0c;为了在这个过程中加深印象&#xff0c;也为了能够有所足迹&#xff0c;我会把自己的学习总结发在专栏中&#xff0c;以便学习交流。 参考书目&#xff1a;《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是…

前端vue项目服务器部署(docker)

前端vue项目服务器部署(docker) 步骤 1: 导入 Nginx Docker 镜像 1、上传 Nginx Docker 镜像 将你的nginx-alpine.tar包上传到服务器上。假设路径为 /var/v3-admin-vite/nginx-alpine.tar。 scp -r "C:\Users\86184\Desktop\v3-admin-vite" root110.40.179.182:/…

第十五届蓝桥杯 Python 省赛题目及解析

第十五届蓝桥杯 Python 省赛题目及解析 选择题 1. 运行下面程序&#xff0c;输出的结果是&#xff08;&#xff09;。 s ‘py’ print(‘t’.join(s)) A、tpyB、ptyC、tptyD、tptyt 正确答案&#xff1a;B 答案解析&#xff1a; join() 方法是字符串的一个方法&#xff0c;…

数据分析 设备一个月以来的参数变化

1数据预处理 import pandas as pd import glob import os# 读取所有CSV文件并合并为一个DataFrame path path_to_your_csv_files/ # CSV文件的文件夹路径 all_files glob.glob(os.path.join(path, "*.csv"))df_list [] for file in all_files:df pd.read_csv(f…

FPGA进阶教程16 同一块FPGA的两个网口实现arp自通信

本项目使用同一个FPGA的两个网口进行千兆以太网的arp自动绑定 目的是为了以后实现两个FPGA之间进行以太网数据的交互 起因:最近公司画了一块板子,上面有两个网口,市面上常见的项目都是将FPGA与PC端实现arp的自动绑定和UDP数据的回环,很少实现两块FPGA之间的以太网数据通信…

网络学习-eNSP配置ACL

AR1路由器配置 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]interface gigabitethernet 0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 192.168.2.254 24 …

chunk-vendors.js 文件过大导致页面加载缓慢解决方案

1、路由懒加载 在 Webpack 中&#xff0c;我们可以使用动态 import语法来定义代码分块点 (split point)&#xff1a; import(./Foo.vue) // 返回 Promise如果您使用的是 Babel&#xff0c;你将需要添加 syntax-dynamic-import 插件&#xff0c;才能使 Babel 可以正确地解析语…

Unity制作更换字体的插件

目录 1.前置知识 1.1 EditorWindow 1&#xff09;目的 2&#xff09;使用方式 1.2 OnGUI() 1&#xff09;目的 2&#xff09;使用方式 1.3 AssetDatabase 1&#xff09;目的 2&#xff09;使用方式 1.4 PrefabUtility 1&#xff09;目的 2&#xff09;使用方式 2…

GNU/Linux - Open函数使用的O_CLOEXEC flag

在 Linux 中&#xff0c;“O_CLOEXEC ”标志与 “open ”系统调用一起使用&#xff0c;用于指定在使用 “exec ”系列函数&#xff08;如 “execve”、“execl ”等&#xff09;执行新程序时&#xff0c;“open ”返回的文件描述符应自动关闭。 In Linux, the O_CLOEXEC flag i…

C++(多态性)

多态 多态是指同样的消息被不同类型的对象接收时导致不同的行为。所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。 最简单的例子就是使用同样的运算符&#xff0c;可以实现整数与整数之间&#xff0c;浮点数与浮点数之间的加法运算。 多…

前端基础面试题·第一篇——HTML

1 .HTML标签头部< !DOCTYPE html> 的作用 DOCTYPE 使 document type的缩写&#xff0c;是html文档的类型声明&#xff0c;告诉浏览器文档的类型&#xff0c;便于解析文档。 这里会涉及到浏览器渲染页面的两种形式&#xff1a; CSS1 Compatible Mode(标准模式): 浏览器使…