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

news/2024/11/14 21:30:15/

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…