【Qt开发】实现系统托盘,托盘菜单,托盘消息
概述
系统托盘就是在系统桌面底部特定的区域显示运行的程序。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开发】实现系统托盘,托盘菜单,托盘消息的更多相关文章
- QT中自定义系统托盘的实现—c++语言为例
将要介绍的是:QT中自定义系统托盘(systemtray)的一个Demo,希望能帮需要的读者快速上手. 前提假设是诸位已经知道QT中的signals .slot以及资源文件,所以关于这些不会再累述. ...
- digitalpersona 开发(系统托盘,监听指纹扫描)
其实很简单,主要是生成 DPFPCapture 对象时,设置他的优先级就可以了. (改成High的话,发布后,windows系统会认为你是病毒.....) C# //设置优先级,这个就是系统托盘后 ...
- WinForm最小化到托盘以及托盘右键菜单
首先,先拖一个NotifyIcon到主窗体,然后设置NotifyIcon的图标,不然等下最小化后,都找不到那个程序了,还有那个Text也是,不写名字,就默认是NotifyIcon了..如下图: 然后双 ...
- C# 最小化到托盘,托盘右击菜单显示
添加notifyIcon控件,并添加Icon,否则托盘没有图标(托盘右键菜单也可直接在属性里添加): 主要的代码: public partial class Form1 : Form { #regio ...
- C、C++、boost、Qt在嵌入式系统开发中的使用
概述 嵌入式系统开发相对来说属于偏底层的开发,也就是与硬件结合比较紧密,只能使用C/C++语言.对于做平台开发的人来说,C语言真的是很"古老"的语言,属于操作系统语言!好多人会觉得 ...
- VS2008下QT开发环境搭建(转)
原博文地址:http://blog.csdn.net/sunnyboycao/article/details/6364444 VS2008集成QT4.7.2环境搭建 作者:jimmy 日期:2011- ...
- QT开发环境安装配置教程
QT开发环境安装配置教程 分类: QT2012-11-29 23:31 35366人阅读 评论(12) 收藏 举报 Linux版的直接在ubutnu软件中心输入QT,安装响应的Designer,Cre ...
- Qt开发环境下载和安装
Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project.org ...
- 嵌入式Qt开发环境的搭建详解
一.嵌入式Qt开发环境的搭建前奏 1.下载arm-linux-gcc-4.4.3-20100728.tar.gz 2.下载qt-everywhere-opensource-src-4.8.5.tar. ...
随机推荐
- springboot中的任务(异步任务--定时任务--邮件任务)
1.pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- CentOS 6.5网络配置静态IP地址
打开VMvare,并进入虚拟机 2 输入用户名,按回车键,再输入密码,登录系统 3 进行网络配置前,需要确认几个事情: 1. 网络适配器模式是否为NAT模式 右键虚拟机,或者点击VMvare菜单栏中的 ...
- 健康类App原型制作分享-Mindmate
Mindmate是一款健康类App,主要是帮助人们快速入眠,放松情绪,它拥有小清新的界面,配图全是由插画组成,生动有趣.在这款原型中,为了保持App的原有特色,将插画通过图片组件导入进来:音乐播放界面 ...
- 使用junit单元测试SpringMvc
对于有依赖关系的方法,junit测试会有些麻烦,可以用@before @after之类的创建数据库连接,然后进行测试,但是有些太麻烦了. 所以就使用一下这个:org.springframework.t ...
- Oracle GoldenGate 四、数据过滤和数据项匹配
写在开始前 从两周前我花了大量的业余时间阅读GoldenGate官方文档,并根据文档实践和进一步学习了解GoldenGate,以下便是根据官方文档理解总结的GoldenGate学习内容: Oracle ...
- idea中处理异常的快捷键
alt+Enter
- 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 ...
- git 上传项目
参考:https://blog.csdn.net/qq_28304687/article/details/69959238?fps=1&locationNum=8 第一部分 初次上传 1.先在 ...
- Array对象的创建及其操作方法
一.创建数组,即实例化数组对象 有三种方式:1. new Array(); 2.new Array(size); ...
- POJ 3685 Matrix (二分套二分)
Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8674 Accepted: 2634 Descriptio ...