一、描述

为避免错点关闭按钮,使得软件关闭退出。需要开发一种类似于QQ桌面之类的功能,点击关闭按钮并不退出,开发的应用程序在用户鼠标点击右上角的关闭按钮时,程序不退出,缩小到右下角,进入托盘。例如win10右下角的图标。

二、思路

1、需要对应用软件程序窗口的关闭按钮进行事件拦截,然后重载,用到QT的QDesktopServices类。

2、要使程序进入托盘,需要用到QT的QSystemTrayIcon类。

三、方法

1、添加头文件和成员

    mainwindow.h 头文件中添加:#include <QSystemTrayIcon>  //t托盘类#include <QDesktopServices> //桌面事件类private: QMenu *trayMenu;//托盘菜单QSystemTrayIcon *tray;//托盘图标添加成员

2、构造函数初始化

    //***托盘***tray= new QSystemTrayIcon(this);//初始化托盘对象traytray->setIcon(QIcon(QPixmap(":/image/image/icon_48px.png")));//设定托盘图标,引号内是自定义的png图片路径tray->setToolTip("My helper"); //提示文字QString title="APP Message";QString text="My helper start up";tray->show();//让托盘图标显示在系统托盘上tray->showMessage(title,text,QSystemTrayIcon::Information,3000); //最后一个参数为提示时长,默认10000,即10s//创建菜单项动作minimizeAction = new QAction("MinWin", this);connect(minimizeAction, SIGNAL(triggered()), this, SLOT(hide())); maximizeAction = new QAction("MaxWin", this);connect(maximizeAction, SIGNAL(triggered()), this, SLOT(showMaximized()))restoreAction = new QAction("restore", this);connect(restoreAction, SIGNAL(triggered()), this, SLOT(showNormal()));quitAction = new QAction("exit", this);connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); //关闭应用//创建托盘菜单trayMenu = new QMenu(this);trayMenu->addAction(minimizeAction);trayMenu->addAction(maximizeAction);trayMenu->addAction(restoreAction);trayMenu->addSeparator();trayMenu->addAction(quitAction);tray->setContextMenu(trayMenu);connect(tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));

3、添加槽函数

void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason ireason)
{switch (ireason){case QSystemTrayIcon::Trigger:this->showNormal();break;case QSystemTrayIcon::DoubleClick:this->showNormal();break;case QSystemTrayIcon::MiddleClick:break;default:break;}
}

4、拦截桌面窗口事件

void MainWindow::closeEvent(QCloseEvent *event)
{if(tray->isVisible()){hide(); //隐藏窗口event->ignore(); //忽略事件}
}
void MainWindow::hideEvent(QHideEvent *event)
{if(tray->isVisible()){hide(); //隐藏窗口event->ignore(); //忽略事件}
}

Qt程序窗口关闭不退出而最小化到托盘的方法相关推荐

  1. Python对Windows程序窗口操作:最大化、最小化、关闭

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 代码 补充 前言 Python对Windows程序窗口操作 最大化 最小化 关闭 代码 import win32con ...

  2. C# 窗口最小化到托盘及右键图标显示菜单

    日常开发有时候需要实现窗口最小化到系统托盘,本文就来讲讲该如何实现winfrom最小化到系统托盘,本例子基于VS2019编写. 用C#开发winform桌面程序时,程序启动后,默认是显示在桌面而且在任 ...

  3. qt 最小化到托盘linux,Qt窗口最小化到托盘,托盘菜单控制

    作为Qt初学者,最近在编写窗口最小化到托盘功能代码的时候遇到了点阻碍. Qt自带的demo实现的功能太过繁琐,涉及知识点又太杂,很难理出最核心的思路.网上的文章代码也很多脱骨于这个demo,注释说明太 ...

  4. Qt中如何使窗口隐藏/最小化到托盘

    Qt中如何实现自己的托盘功能,Qt自带的demo也很明了,这里我们就来实现自己的一个托盘... 功能:窗口最小化后或者点击"hide"按钮将窗口隐藏到托盘. 通常最小化的窗口会在任 ...

  5. Qt捕捉窗口关闭事件

    Qt捕捉窗口关闭事件 有时候我们希望在关闭窗口之前做一些操作,例如保存缓存数据或向用户提示是否关闭窗口等等. 由于一般的窗口都是继承自QWidget, 那么我们可以通过覆盖QWidget中的虚函数cl ...

  6. Qt关于窗口关闭触发函数/信号

    方法一. 窗口右上角的X按键会导致其在不给出任何提示的情况下直接退出, 当点击右上角的x按键时,会触发Qt中的一个事件处理函数:void QWidget::closeEvent ( QCloseEve ...

  7. PyQt5 技术篇-QWidget、QDialog程序窗口关闭closeEvent()触发事件方法重写

    我用 QWidget 来做个示例,它在程序窗口关闭时会触发 closeEvent() 事件,我们把它重写后就能实现关闭窗口时触发我们想要的效果. 重点就两个,如下所示: 重点一: 重写组件的 clos ...

  8. pyqt5 最小化 系统托盘_Qt中如何使窗口隐藏/最小化到托盘

    展开全部 功能62616964757a686964616fe78988e69d8331333361303733:窗口最小化后或者点击"hide"按钮将窗口隐藏到托盘. 通常最小化的 ...

  9. 【pyqt5学习】——窗口最小化至托盘、取消任务栏图标

    目录 1.最小化至托盘 1)重写系统托盘类,设置托盘图标等属性 2)将具体的窗口放入托盘 2.取消任务栏界面图标 3.问题汇总 1)退出后托盘图标还是存在,没有消失 2)最小化后左下角会出现 窗口 3 ...

最新文章

  1. 《设计模式 系列》- 面向对象六大原则
  2. ansible的安装和使用
  3. VS2012+WDK8.0搭建WDF驱动开发环境
  4. 成功解决AttributeError: module tensorflow.image has no attribute resize
  5. 基于Windows Socket 的网络通信中的心跳机制原理
  6. [vue] vue中怎么重置data?
  7. Android mock for循环,Android单元测试(五):依赖注入,将mock方便的用起来
  8. 【C语言】实参求值的顺序
  9. 软件项目质量管理经验谈
  10. MySQl中文1001无标题_Mysql中字段类型不一致导致索引无效的处理办法
  11. 流水线机制、滑动窗口协议、GBN、SR
  12. mac系统linux不能ping外网,Mac上配置Linux网络适配器(NAT模式),无法ping通
  13. 计算机软件著作权登记证书
  14. jQuery插件使用-瀑布流
  15. 云杰恒指:7.29恒指期货实盘指导交易复盘
  16. 多伦多大学计算机专音乐专业,多伦多大学音乐理论专业介绍
  17. html table的边框线怎么变圆角_CSS如何设置html table表格边框样式
  18. 从诱发反应中解码动态脑模式:应用于时间序列神经成像数据的多元模式分析教程
  19. opencv(c++)------图像分割(阙值、自适应阙值、grabCut、floodfill、wathershed)
  20. ubuntu 17\18.04 调节鼠标指针速度

热门文章

  1. 学习程序开发的方法,仅供参考吧
  2. Linux 文件区块连续吗,关于Linux文件系统的的简单理解和认识
  3. 安装oculus运行时出现问题_U盘安装windows10出现的问题解决方法
  4. 辽宁大学计算机专业接收调剂,目前有计算机专业调剂通知的学校,不断更新—3月26日更新,新增辽宁大学等...
  5. java全局异常处理_详解Spring全局异常处理的三种方式
  6. php 显示变量类型
  7. 【电路补习笔记】10、电感式开关电源(BUCK 降压电路)
  8. MSP432P401R TI Drivers 库函数学习笔记(七)I2C驱动OLED屏幕
  9. MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置
  10. SHELL test [ 命令用法