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

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

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

系统托盘图标的截图

点击获取Qt Widget组件下载

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

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

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

Window类定义

Window类继承了QWidget:

cpp 复制代码
class Window : public QDialog
{
Q_OBJECT

public:
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 主题!
相关推荐
青草地溪水旁1 分钟前
UML函数原型中stereotype的含义,有啥用?
c++·uml
萤丰信息5 分钟前
技术赋能安全:智慧工地构建城市建设新防线
java·大数据·开发语言·人工智能·智慧城市·智慧工地
青草地溪水旁8 分钟前
UML函数原型中guard的含义,有啥用?
c++·uml
Pocker_Spades_A28 分钟前
飞算JavaAI家庭记账系统:从收支记录到财务分析的全流程管理方案
java·开发语言
CHEN5_022 小时前
【Java基础常见辨析】重载与重写,深拷贝与浅拷贝,抽象类与普通类
java·开发语言
Despacito0o2 小时前
C语言基础:变量与进制详解
java·c语言·开发语言
nightunderblackcat2 小时前
进阶向:人物关系三元组,解锁人物关系网络的钥匙
开发语言·python·开源·php
光头闪亮亮3 小时前
C++凡人修仙法典 - 宗门版-上
c++
光头闪亮亮3 小时前
C++凡人修仙法典 - 宗门版-下
c++
John_ToDebug3 小时前
Chromium base 库中的 Observer 模式实现:ObserverList 与 ObserverListThreadSafe 深度解析
c++·chrome·性能优化