Qt系统托盘程序的创建

一般来说,我们的应用程序都是控制台程序,或者窗口程序,点击应用程序右上角的关闭按钮,就会将程序关闭。但是有些应用,例如微信、或者杀毒软件等等,点击关闭按钮后,只是将程序最小化到右下角的菜单栏而已,并没有关闭程序。而要彻底关闭程序,需要点击右下角对应程序的右键菜单,进行退出。
那么,这种托盘程序,在QT是怎么实现的呢?
Qt中,通过类QSystemTrayIcon,实现系统托盘,右键菜单的实现,通过QMenuQAction实现。

直接上代码

sysTrayIconWidget.h

#ifndef SYSTRAYICONWIDGET_H
#define SYSTRAYICONWIDGET_H#include <QWidget>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QCloseEvent>QT_BEGIN_NAMESPACE
namespace Ui { class SysTrayIconWidget; }
QT_END_NAMESPACEclass SysTrayIconWidget : public QWidget
{Q_OBJECTpublic:SysTrayIconWidget(QWidget *parent = nullptr);~SysTrayIconWidget() override;private:Ui::SysTrayIconWidget *ui;QSystemTrayIcon *m_sysTrayIcon; //系统托盘void initSysTrayIcon();QMenu *m_menu;                  //菜单QAction *m_showMainAction;      //动作QAction *m_exitAppAction;       //动作void createActions();void createMenu();private slots:void on_showMainAction();void on_exitAppAction();protected:void closeEvent (QCloseEvent *event) override;
};
#endif // SYSTRAYICONWIDGET_H

sysTrayIconWidget.cpp

#include "sysTrayIconWidget.h"
#include "ui_sysTrayIconWidget.h"
#include <QMessageBox>SysTrayIconWidget::SysTrayIconWidget(QWidget *parent): QWidget(parent), ui(new Ui::SysTrayIconWidget)
{ui->setupUi(this);initSysTrayIcon();
}SysTrayIconWidget::~SysTrayIconWidget()
{delete ui;
}//创建系统托盘
void SysTrayIconWidget::initSysTrayIcon()
{//隐藏程序主窗口this->hide();//新建QSystemTrayIcon对象m_sysTrayIcon = new QSystemTrayIcon(this);//设置托盘图标QIcon icon = QIcon(":/images/testIcon.png");    //资源文件添加的图标m_sysTrayIcon->setIcon(icon);//当鼠标移动到托盘上的图标时,会显示此处设置的内容m_sysTrayIcon->setToolTip("托盘提示信息");//给QSystemTrayIcon添加槽函数connect(m_sysTrayIcon, &QSystemTrayIcon::activated,[=](QSystemTrayIcon::ActivationReason reason){switch(reason){case QSystemTrayIcon::Trigger://单击托盘图标m_sysTrayIcon->showMessage(QObject::trUtf8("Message Title"),QObject::trUtf8("欢迎使用此程序"),QSystemTrayIcon::Information,1000);break;case QSystemTrayIcon::DoubleClick://双击托盘图标//双击后显示主程序窗口this->show();break;default:break;}});//建立托盘操作的菜单createActions();createMenu();//在系统托盘显示此对象m_sysTrayIcon->show();
}//创建动作
void SysTrayIconWidget::createActions()
{m_showMainAction = new QAction("关于系统", this);connect(m_showMainAction,SIGNAL(triggered()),this,SLOT(on_showMainAction()));m_exitAppAction = new QAction("退出", this);connect(m_exitAppAction,SIGNAL(triggered()),this,SLOT(on_exitAppAction()));
}//创建托盘菜单
void SysTrayIconWidget::createMenu()
{m_menu = new QMenu(this);//新增菜单项---显示主界面m_menu->addAction(m_showMainAction);//增加分隔符m_menu->addSeparator();//新增菜单项---退出程序m_menu->addAction(m_exitAppAction);//把QMenu赋给QSystemTrayIcon对象m_sysTrayIcon->setContextMenu(m_menu);
}//当在系统托盘点击菜单内的显示主界面操作
void SysTrayIconWidget::on_showMainAction()
{QApplication::setQuitOnLastWindowClosed( false );QMessageBox::information(nullptr, "xxxx", "xxxx有限公司copyright©2022");
}//当在系统托盘点击菜单内的退出程序操作
void SysTrayIconWidget::on_exitAppAction()
{qApp->exit();
}//关闭事件
void SysTrayIconWidget::closeEvent(QCloseEvent *event)
{//忽略窗口关闭事件QApplication::setQuitOnLastWindowClosed( true );this->hide();event->ignore();
}

需要注意的是:一定要在closeEvent()中忽略关闭窗口关闭事件,否则,点击右上角的关闭按钮后,还是会退出程序。

![在这里插入图片描述](https://img-blog.csdnimg.cn/b538a178e65149c7a046e6e0cb7cf718.png

Qt系统托盘程序的实现相关推荐

  1. QT系统托盘应用程序

    在QT中QSystemTrayIcon类提供了创建系统托盘程序的功能. QSystemTrayIcon类为系统托盘中的应用程序提供图标. 现代操作系统通常会在桌面上提供一个称为系统托盘(system ...

  2. Windows下QT实现托盘程序及系统托盘刷新

    目录 一.现象 二.托盘程序的QT实现 1.功能说明 2.使用的类 3.代码实现 三.windows系统托盘刷新 1.托盘刷新代码 2.托盘刷新代码的调用 一.现象 windows下当程序关闭,有时系 ...

  3. winform 系统托盘程序

    1.如图,创建系统托盘 效果:当我单击 系统托盘时,窗体正常化. 只要用到几个属性. ①windowState来设置window的状态.这个在这次的实验中,最重要. ②ShowInTaskbar 来设 ...

  4. qt系统托盘显示、无主窗体

    系统图盘是应用程序经常用到的一个控件,当应用程序需要长时间存在的时候,这个控件会变得非常有用,比如,窗口隐藏,显示,关于.关闭等接口都可以放在图盘中处理,今天与到一个问题,需求是这样的:只需要显示图盘 ...

  5. 创建windows系统托盘应用程序

    #include <windows.h>#define IDR_PAUSE 12 #define IDR_START 13 LPCTSTR szAppClassName = TEXT(&q ...

  6. python 系统托盘_使用 PySide 实现 Python 系统托盘图示

    系统托盘图示 (system tray icon) 通常用来在桌面应用程序最小化后,不希望在任务列(task bar)出现时,提供一个简单跟使用者交互的接口. 透过这样的用户接口,应用程序可以在有重要 ...

  7. VC 系统托盘 气泡提示

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...

  8. VC6系统托盘类|崩溃自动重建图标|HOOK窗口消息|气泡效果更新SDK

    解决制作托盘气泡提示中遇到的'NIF_INFO' : undeclared identifier VC6下实现托盘气泡提示的关键是要更新SDK,实际上应该就是要更新SHELLAPI.h,SHELL32 ...

  9. qt修改程序图标名称_解决Qt应用程序添加icon图标,修改窗口图标以及添加系统托盘问题...

    一.Qt应用程序添加icon图标的方法: 首先,我们需要先准备两个文件,一个是icon图标,另一个是rc文件,我分别命名为"myApp.rc"和"soft.ico&quo ...

最新文章

  1. 不插即用!配备微信网页授权模块的CodeIgniter应用脚手架
  2. 网络营销外包浅析当前行业竞争压力之下网络营销外包公司如何应对?
  3. MySQL 系统架构 说明
  4. 人脸识别技术新突破,网友:匪徒带着面罩呢?
  5. python嵌套字典赋值_Python:更新深度嵌套字典中的值
  6. MySQL协议包说明
  7. Orchid兰花协议简介——分布式匿名代理网络
  8. JDK core dump分析
  9. dubbo源码分析系列(1)扩展机制的实现
  10. CNN-1: LeNet-5 卷积神经网络模型
  11. 前端干货之JS最佳实践
  12. ASP.NET Web API接受AngualrJS的QueryString的两种方式
  13. 智慧城市建设亟待突破大数据瓶颈
  14. 汉王拉开人脸识别产业化大幕 市场应用前景广阔
  15. Servlet3.0
  16. android kl文件
  17. 5款Java微服务开源框架
  18. 大学计算机基础排版和打印毕业论文,大学计算机基础-电子教案第5章
  19. 王建国——2020年最受人民喜爱的艺术家
  20. 算法作业04(回溯与分支界限算法)(骑士游历与行列变换问题)

热门文章

  1. java手机短信验证,并存入redis中,验证码时效5分钟
  2. 【PPP协议是哪一层协议?】
  3. 尚医通 (一) --------- 项目介绍
  4. WH_KEYBOARD和WH_KEYBOARD_LL的区别
  5. Windows 10, version 21H1 ARM64
  6. 闪电式扩张,你会了么?
  7. C#学习笔记--this关键字和索引器
  8. C语言关键字restrict
  9. 2021-08-18 mos 识别 应用与原理 个人总结
  10. 为什么有混合云的存在?