「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 主题!
相关推荐
m0_720245014 小时前
1543.统计好三元组(简单)
开发语言·算法
叠层归一研究院6 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
明朝百晓生6 小时前
Deep RL learning[2026/8]
开发语言·javascript·人工智能
weixin-a153003083167 小时前
python-装饰器
开发语言·python
我的xiaodoujiao7 小时前
快速学习Python基础知识详细图文教程17--类型注解和断点调试
开发语言·python·学习·测试工具
leoZ2319 小时前
AI 辅助开发的五道坎
开发语言·人工智能·视觉检测·bert·php·超分辨率重建·openvino
会周易的程序员9 小时前
aiDgePLC — IEC61131-3 ST PLC 虚拟机调试与运行环境
c++·物联网·虚拟机·st·工业协议·iec61131·梯形图
程序员老陆9 小时前
Qt的QThread::usleep和FFmpeg的libavutil模块的av_usleep哪个精度高一些?
开发语言·qt·ffmpeg·音视频
2601_9638699510 小时前
【计算机毕业设计】基于Java的相框定制系统的设计与实现
java·开发语言·课程设计
名字还没想好☜10 小时前
Go 的 unsafe.Pointer 实战:零拷贝 []byte↔string 转换与三条铁律
开发语言·后端·golang·go·unsafe