概述

系统托盘就是在系统桌面底部特定的区域显示运行的程序。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. 和大于S的最小子数组 · Minimum Size Subarray Sum

    [抄题]: 给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组.如果无解,则返回 -1. 给定数组 [2,3,1,2,4,3] 和 s = 7, 子 ...

  2. Under-sampling

    Under sampling    When the signal frequency is high, and the tester frequency can’t catch the signal ...

  3. android studio快捷键大全

    ----常用快捷键 1.Ctrl+E,可以显示最近编辑的文件列表 2.Shift+Click可以关闭文件 3.Ctrl+[或]可以跳到大括号的开头结尾 4.Ctrl+Shift+Backspace可以 ...

  4. 利用BeanUtils.copyProperties 克隆出新对象,避免对象重复问题

    1.经常用jQuery获取标签里面值val(),或者html(),text()等等,有次想把获取标签的全部html元素包括自己也用来操作,查询了半天发现$("#lefttr1"). ...

  5. sockaddr与sockaddr_in

    struct sockaddr { unsigned short sa_family;     char sa_data[14]; }; 此数据结构用做bind.connect.recvfrom.se ...

  6. Java 高级基础——反射

    Java 高级基础--反射 反射的意义:Java 强类型语言,但是我们在运行时有了解.修改信息的需求,包括类信息.成员信息以及数组信息. 基本类型与引用类型 基本类型,(固定的 8 种) 整数:byt ...

  7. centos7 mysql 数据库备份与还原

    数据库备份 show databases; #先查看一下数据库 现在我要备份word数据库 退出mysql输入 mysqldump -u root -p word > word.sql #我把它 ...

  8. 软件项目第一个Sprint评分

    第一组 跑男 跑男组他们设计的是极速蜗牛小游戏,他们的界面背景图片做的挺漂亮,现在为止也实现了大部分功能, 但是我没有太听懂他们的游戏规则. 因为蜗牛出发后,每次碰到屏幕边缘后都会有确定的反弹结果,也 ...

  9. js练习计算器

    js练习计算器,支持鼠标点击.键盘操作 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  10. Orchard 介绍

    0.Introduction 下载地址 https://orchard.codeplex.com/ Orchard 是由微软公司创建,基于 ASP.NET MVC 技术的免费开源内容管理系统: 可用于 ...