概述

系统托盘就是在系统桌面底部特定的区域显示运行的程序。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_OBJECTpublic: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 0;
}
 

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

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

9.启动后效果如下

【Qt开发】实现系统托盘,托盘菜单,托盘消息相关推荐

  1. 迅为IMX6ULL教程更新至2060+页,裸机开发,Linux系统移植,驱动开发,构建文明系统,QT开发,系统编程

    教程更新至2060+页 彻底让零基础的同学真正学会 更完善的教程更全面的讲解更高效的学习 第一部分 总领及学习指引:主要探讨的学习方法,我们将尽量用比较简洁的方式,让大家明白嵌入式系统知识体系,以及它 ...

  2. C++Qt开发——阻止系统休眠方法

    1. Windows下阻止系统休眠 有的程序在运行过程中需要阻止系统休眠以保证正常地工作,比如常见的迅雷,在Qt开发中实现这样的效果只需要增加一行代码即可. 在main函数中增加如下代码: SetTh ...

  3. ui li 菜单 点击添加下级_【Qt开发】实现系统托盘,托盘菜单,托盘消息

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

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

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

  5. 【JavaFx实现系统托盘,去重AWT托盘乱码】

    [JavaFx实现系统托盘,去重AWT托盘乱码] 说明 Javafx实现系统托盘,默认使用的是awt的组件, 但是源码是utf-8,程序运行的时候有中文菜单就产生乱码,即使转码也无效,参考资料说Pop ...

  6. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  7. Qt,C++开发炫酷圆形扇形菜单面板

    一如既往,先上图 动画效果参考下面的是视频 20220316-182247 摘要描述: 1.支持嵌入面板和弹出按钮两种,目前仅完成嵌入面板,后期会实现弹出实现 2.支持非常多的自定义功能,有关自定义功 ...

  8. Electron-vue开发实战7——命令行调用与系统级别右键菜单项的实现

    原文首发在我的博客,欢迎关注! 前言 前段时间,我用electron-vue开发了一款跨平台(目前支持主流三大桌面操作系统)的免费开源的图床上传应用--PicGo,在开发过程中踩了不少的坑,不仅来自应 ...

  9. linux系统中如何安装qwt,linux下Qt开发环境中qwt库的安装与使用

    qwt的安装与使用 安装好qt开发环境后,先去下载qwt库源代码. 以我下载的qwt-6.0.1.zip为例,解压得到qwt-6.0.1. 1.安装qwt-6.0.1 执行下面的命令:1 cd qwt ...

最新文章

  1. Python中常见字符串去除空格的方法总结
  2. linux c++ 警告 warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings] 解决方法
  3. [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图
  4. Lambda表达式——注重过程的编程思想
  5. 数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)
  6. duilib自定义消息
  7. 支持后悔药的etcdui
  8. Tiny-Event-Manager 安全轻量的资源管理器
  9. 数据库的相关语句(where,order by)
  10. convert转换虚拟机注意事项及相关经验介绍
  11. 验证码重新发送倒计时
  12. Unable to load class 'org.gradle.api.internal.component.Usage
  13. iPhone 无线投影到 Mac
  14. ue4模型为啥这么亮_UE4中的HLOD和Proxy
  15. JavaScript中使用attachEvent实现事件监听
  16. 六轴陀螺仪简介及在智能车中的应用
  17. java、Dom4j、循环迭代递归解析XML,不论是否是叶子节点、有复合结构
  18. java 对战平台-魔兽版
  19. 用Python海归作图--turtle,画椭圆
  20. 初次使用tshark小结

热门文章

  1. PDFBox提取PDF信息
  2. 题解 CF97C 【Winning Strategy】
  3. html+css样式:图片切换-----立体旋转
  4. 22春天津大学《货币银行学》在线作业2
  5. c++运算符运算顺序
  6. cocos creator实现浏览星球的功能,附源码
  7. 在VUE中使用RSA加密解密加签
  8. 基于51单片机的简单时钟电路
  9. Microsoft Office365 DevDays - 6th
  10. linux将h264文件转化为flv文件