概述

系统托盘就是在系统桌面底部特定的区域显示运行的程序。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)函数,完整代码如下:

#pragma once
#pragma execution_character_set("utf-8") #include <QDialog>
#include <QtWidgets>
#include "ui_TrayDialog.h" class TrayDialog : public QDialog
{
Q_OBJECT public:
TrayDialog(QWidget *parent = Q_NULLPTR);
~TrayDialog(); private:
void closeEvent(QCloseEvent *event); private slots:
int OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason);
int OnExit(); private:
Ui::TrayDialog ui;
QSystemTrayIcon m_systray;
};

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

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

    //设置提示文字
m_systray.setToolTip("系统托盘演示程序"); // 设置托盘图标
m_systray.setIcon(QIcon(":/qtlearn/Resources/EXE.ico")); //托盘菜单项
QMenu * menu = new QMenu();
menu->addAction(ui.actionExit);
m_systray.setContextMenu(menu); // 关联托盘事件
connect(&m_systray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(OnSystemTrayClicked(QSystemTrayIcon::ActivationReason))); //显示托盘
m_systray.show(); //托盘菜单响应
connect(ui.actionExit, SIGNAL(triggered()), this, SLOT(OnExit()));

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

/************************************
@ Brief: 点击关闭窗口
@ Author: woniu201
@ Created: 2019/03/21
@ Return:
************************************/
void TrayDialog::closeEvent(QCloseEvent *event)
{
this->hide();
event->ignore();
}

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

/************************************
@ Brief: 双击/单击托盘事件
@ Author: woniu201
@ Created: 2019/03/21
@ Return:
************************************/
int TrayDialog::OnSystemTrayClicked(QSystemTrayIcon::ActivationReason reason)
{
if (reason == QSystemTrayIcon::Trigger
|| reason == QSystemTrayIcon::DoubleClick)
{
// 显示主窗口
this->showNormal();
}
return ;
}

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

/************************************
@ Brief: 托盘菜单退出
@ Author: woniu201
@ Created: 2019/03/21
@ Return:
************************************/
int TrayDialog::OnExit()
{
QApplication::exit();
return ;
}

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. mybatis使用foreach进行批量插入和删除操作

    一.批量插入 1.mapper层 int insertBatchRoleUser(@Param("lists") List<RoleUser> lists);//@Pa ...

  2. Spring boot 、mybatis 和 swagger 整合

    文件路径 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  3. ireport related

    http://blog.csdn.net/q326527970/article/details/7049047

  4. PolyCluster: Minimum Fragment Disagreement Clustering for Polyploid Phasing 多聚类:用于多倍体的最小碎片不一致聚类

    摘要 分型是计算生物学的一个新兴领域,在临床决策和生物医学科学中有着重要的应用. 虽然机器学习技术在许多生物医学应用中显示出巨大的潜力,但它们在分型中的用途尚未完全理解. 在本文中,我们研究了基于聚类 ...

  5. nignx重启

    .进入nginx安装目录sbin下 .输入./nginx -s reload

  6. (转)【javascript基础】原型与原型链

    原文地址:http://www.cnblogs.com/allenxing/p/3527654.html 前言 原型是什么 理解原型对象 原型对象 isPrototypeOf hasOwnProper ...

  7. .NET基础 (10)流和序列化

    流和序列化1 什么是流,.NET中有哪些常见的流2 如何使用压缩流3 Serializable特性有何作用4 .NET提供了哪几种可进行序列化操作的类型5 如何自定义序列化和反序列化的过程 流和序列化 ...

  8. 如何在Windows环境下安装Linux系统虚拟机

    如何在Windows环境下安装Linux系统虚拟机 本篇经验写给想要入门学习C语言的小白们.Windows系统因为使用窗口图形化,操作简单,功能多样,所以我们在Windows环境下可以做到很多,但想要 ...

  9. Opengl的TOOL收集

    1. http://my.oschina.net/sweetdark 不错的opengl学习网站 2, 优秀博客 网址: http://www.zwqxin.com/archives/opengl/s ...

  10. 转-SourceTree注册atlassian账号SIGUP按钮灰色无法注册的问题

    我们第一次安装sourcetree的时候会要求我们登陆一个账号 但是,会出现注册按钮变灰的怪现象 令人头疼的是,在官网也搞不定. 下面的网址可以顺利注册账号的网址 https://www.atlass ...