概述

系统托盘就是在系统桌面底部特定的区域显示运行的程序。windows在任务栏状态区域,linux在布告栏区域。应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能。

演示Demo实现功能:

1.应用启动后,任务栏,系统托盘可以看到该程序。

2.点击右上角×关闭窗口,自动隐藏窗口,托盘可以看到该程序。

3.鼠标在托盘图标上右键,弹出"退出程序"菜单栏,并带有图标。

步骤:

1.工程中新建TrayDialog类,基类是QDialog,在界面上添加Text Browser控件和提示信息。

2.在TrayDialog.h头文件中添加#include <QtWidgets>包含文件

3.添加成员变量

    QSystemTrayIcon m_systray,

  信号槽响应函数

    int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason);

    int OnExit();

  重写closeEvent(QCloseEvent *event)函数,完整代码如下:

  1. #pragma once
  2. #pragma execution_character_set("utf-8")
  3.  
  4. #include <QDialog>
  5. #include <QtWidgets>
  6. #include "ui_TrayDialog.h"
  7.  
  8. class TrayDialog : public QDialog
  9. {
  10. Q_OBJECT
  11.  
  12. public:
  13. TrayDialog(QWidget *parent = Q_NULLPTR);
  14. ~TrayDialog();
  15.  
  16. private:
  17. void closeEvent(QCloseEvent *event);
  18.  
  19. private slots:
  20. int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason);
  21. int OnExit();
  22.  
  23. private:
  24. Ui::TrayDialog ui;
  25. QSystemTrayIcon m_systray;
  26. };

4.在Qt Designer中添加Action,用于托盘右键退出程序。

5.构造函数TrayDialog(QWidget *parent)中添加如下代码:

  1. //设置提示文字
  2. m_systray.setToolTip("系统托盘演示程序");
  3.  
  4. // 设置托盘图标
  5. m_systray.setIcon(QIcon(":/qtlearn/Resources/EXE.ico"));
  6.  
  7. //托盘菜单项
  8. QMenu * menu = new QMenu();
  9. menu->addAction(ui.actionExit);
  10. m_systray.setContextMenu(menu);
  11.  
  12. // 关联托盘事件
  13. connect(&m_systray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
  14. this, SLOT(OnSystemTrayClicked(QSystemTrayIcon::ActivationReason)));
  15.  
  16. //显示托盘
  17. m_systray.show();
  18.  
  19. //托盘菜单响应
  20. connect(ui.actionExit, SIGNAL(triggered()), this, SLOT(OnExit()));

6.关闭窗口事件响应函数

  1. /************************************
  2. @ Brief: 点击关闭窗口
  3. @ Author: woniu201
  4. @ Created: 2019/03/21
  5. @ Return:
  6. ************************************/
  7. void TrayDialog::closeEvent(QCloseEvent *event)
  8. {
  9. this->hide();
  10. event->ignore();
  11. }

7.双击/单击托盘应用程序响应函数

  1. /************************************
  2. @ Brief: 双击/单击托盘事件
  3. @ Author: woniu201
  4. @ Created: 2019/03/21
  5. @ Return:
  6. ************************************/
  7. int TrayDialog::OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason)
  8. {
  9. if (reason == QSystemTrayIcon::Trigger
  10. || reason == QSystemTrayIcon::DoubleClick)
  11. {
  12. // 显示主窗口
  13. this->showNormal();
  14. }
  15. return ;
  16. }

8.托盘右键退出响应函数

  1. /************************************
  2. @ Brief: 托盘菜单退出
  3. @ Author: woniu201
  4. @ Created: 2019/03/21
  5. @ Return:
  6. ************************************/
  7. int TrayDialog::OnExit()
  8. {
  9. QApplication::exit();
  10. return ;
  11. }

9.启动后效果如下

【Qt开发】实现系统托盘,托盘菜单,托盘消息的更多相关文章

  1. QT中自定义系统托盘的实现—c++语言为例

    将要介绍的是:QT中自定义系统托盘(systemtray)的一个Demo,希望能帮需要的读者快速上手. 前提假设是诸位已经知道QT中的signals .slot以及资源文件,所以关于这些不会再累述. ...

  2. digitalpersona 开发(系统托盘,监听指纹扫描)

    其实很简单,主要是生成  DPFPCapture  对象时,设置他的优先级就可以了. (改成High的话,发布后,windows系统会认为你是病毒.....) C# //设置优先级,这个就是系统托盘后 ...

  3. WinForm最小化到托盘以及托盘右键菜单

    首先,先拖一个NotifyIcon到主窗体,然后设置NotifyIcon的图标,不然等下最小化后,都找不到那个程序了,还有那个Text也是,不写名字,就默认是NotifyIcon了..如下图: 然后双 ...

  4. C# 最小化到托盘,托盘右击菜单显示

    添加notifyIcon控件,并添加Icon,否则托盘没有图标(托盘右键菜单也可直接在属性里添加): 主要的代码: public partial class Form1 : Form { #regio ...

  5. C、C++、boost、Qt在嵌入式系统开发中的使用

    概述 嵌入式系统开发相对来说属于偏底层的开发,也就是与硬件结合比较紧密,只能使用C/C++语言.对于做平台开发的人来说,C语言真的是很"古老"的语言,属于操作系统语言!好多人会觉得 ...

  6. VS2008下QT开发环境搭建(转)

    原博文地址:http://blog.csdn.net/sunnyboycao/article/details/6364444 VS2008集成QT4.7.2环境搭建 作者:jimmy 日期:2011- ...

  7. QT开发环境安装配置教程

    QT开发环境安装配置教程 分类: QT2012-11-29 23:31 35366人阅读 评论(12) 收藏 举报 Linux版的直接在ubutnu软件中心输入QT,安装响应的Designer,Cre ...

  8. Qt开发环境下载和安装

    Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project.org ...

  9. 嵌入式Qt开发环境的搭建详解

    一.嵌入式Qt开发环境的搭建前奏 1.下载arm-linux-gcc-4.4.3-20100728.tar.gz 2.下载qt-everywhere-opensource-src-4.8.5.tar. ...

随机推荐

  1. springboot中的任务(异步任务--定时任务--邮件任务)

    1.pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  2. CentOS 6.5网络配置静态IP地址

    打开VMvare,并进入虚拟机 2 输入用户名,按回车键,再输入密码,登录系统 3 进行网络配置前,需要确认几个事情: 1. 网络适配器模式是否为NAT模式 右键虚拟机,或者点击VMvare菜单栏中的 ...

  3. 健康类App原型制作分享-Mindmate

    Mindmate是一款健康类App,主要是帮助人们快速入眠,放松情绪,它拥有小清新的界面,配图全是由插画组成,生动有趣.在这款原型中,为了保持App的原有特色,将插画通过图片组件导入进来:音乐播放界面 ...

  4. 使用junit单元测试SpringMvc

    对于有依赖关系的方法,junit测试会有些麻烦,可以用@before @after之类的创建数据库连接,然后进行测试,但是有些太麻烦了. 所以就使用一下这个:org.springframework.t ...

  5. Oracle GoldenGate 四、数据过滤和数据项匹配

    写在开始前 从两周前我花了大量的业余时间阅读GoldenGate官方文档,并根据文档实践和进一步学习了解GoldenGate,以下便是根据官方文档理解总结的GoldenGate学习内容: Oracle ...

  6. idea中处理异常的快捷键

    alt+Enter

  7. Thrift编译错误('::malloc' has not been declared)

    问题版本:0.9.0 make[4]: Entering directory `/tmp/X/thrift-0.9.0/lib/cpp' /bin/sh ../../libtool  --tag=CX ...

  8. git 上传项目

    参考:https://blog.csdn.net/qq_28304687/article/details/69959238?fps=1&locationNum=8 第一部分 初次上传 1.先在 ...

  9. Array对象的创建及其操作方法

    一.创建数组,即实例化数组对象      有三种方式:1. new Array();                          2.new Array(size);               ...

  10. POJ 3685 Matrix (二分套二分)

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 8674   Accepted: 2634 Descriptio ...