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

一、描述

为避免错点关闭按钮,使得软件关闭退出。需要开发一种类似于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(); //忽略事件}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UltraEdit如何自动换行

UltraEdit是一款功能强大的文本工具&#xff0c;可以用于编程。安装UltraEdit之后&#xff0c;默认的设置没有自动换行。设置的方法是&#xff0c;点击菜单栏的“高级→配置”&#xff0c;找到“编辑器→自动换行/制表符设置”&#xff0c;如下图的左边。然后&#xff0c;把“默…

老华为可以升级鸿蒙,真良心!五年前老机型都能升级华为鸿蒙

真良心&#xff01;五年前老机型都能升级华为鸿蒙来源&#xff1a;搜狐网作者&#xff1a;小码说娱乐时间&#xff1a;2021-06-03 12:01:21经过多年的摔打&#xff0c;鸿蒙终于迎来了新生。而在6月2日(今天)晚上的发布会上&#xff0c;令我们感到震惊的不仅仅是华为的新品&…

T-SQL SUM Functions

SQL Server SUM()函数&#xff0c;计算字段值和&#xff0c;不包括NULL值。 下面例子中&#xff0c;计算所有职员薪金总值&#xff1a; 数据源&#xff1a; SQL语句&#xff1a; SELECTSUM([Salary]) AS[Totals]FROM[dbo].[Member]执行结果&#xff1a;

如何在Microwindows中显示图片和安装字体

From: http://bbs.chinaunix.net/thread-1987116-1-1.html 一、前言Microwindows可以运行在 支持Framebuffer的 32位的 Linux系统上&#xff0c;或者也可以使用著名的 SVGALib[45] 库来进行图形显示。此外&#xff0c;它还被移植到16位的EL KS 和实模式的MSDOS上。Microwindows…

MySQL常用语法记录

0、说明 记录MySQL使用到的常用语法。 1、MySQLDISTINCT唯一 2、MySQLLIMIT限制 3、MySQL ORDER排序升序 4、MySQL DESC降序 5、MySQL WHERE 过滤 6、MySQL 操作符 AND OR ,AND优先级高于OR 7、MySQL IN 8、MySQL NOT 否定之后跟的任何条件 9、MySQL LIKE通配符 可在任意位置…

js DOM——JS学习笔记2015-7-2(第73天)

这个是w3cschool上面的简易版教程&#xff0c;虽然简易&#xff0c;但是对整个JS DOM&#xff0c;有个大致的概念&#xff0c;同时引入思维导图这种图表法学习方式&#xff0c;期待更加便于记忆和管理 转载于:https://www.cnblogs.com/zhangxg/p/4615453.html

花卉网页html,花卉管理系统(数据库+源码)

这是一个入门级示例&#xff0c;实现了花卉的 增加 和 查询功能资源下载此资源下载价格为2D币&#xff0c;请先登录资源文件列表花卉管理系统/FlowerManagerSys/.vs/FlowerManagerSys/v15/.suo , 53248花卉管理系统/FlowerManagerSys/.vs/FlowerManagerSys/v15/Server/sqlite3/…

ECNUOJ 2143 端午节快乐

端午节快乐 Time Limit:1000MS Memory Limit:65536KBTotal Submit:1720 Accepted:868 Description 有一段有趣的传说。公元前340年&#xff0c;爱国诗人、楚国大夫屈原&#xff0c;面临亡国之痛&#xff0c;于五月五日&#xff0c;悲愤地怀抱大石投汩罗江&#xff0c;为了不使鱼…

教你看编号选希捷硬盘

对于大部分消费者而言&#xff0c;很多人在选购硬盘时&#xff0c;都会把注意力集中在硬盘的容量上&#xff0c;而近期一些用户也会注意到硬盘的接口&#xff08;IDE或者是SATA&#xff09;等方面&#xff0c;但是&#xff0c;硬盘的性能并不仅仅表示在容量以及接口上&#xff…

两块网卡实现多台机器共享上网

组建局域网内部网络&#xff0c;遇到的问题&#xff1a;购买电信的宽带&#xff0c;多人拨号肯定是不行的(貌似同时超过4台机器拨一个号就自动被断开网络了)。 使用一些软件共享上网觉得既然是人家开发的软件&#xff0c;不太放心里面加了什么代码会监控这边的网络&#xff0c;…

Gvim 字体大小设置和FencView插件安装

1. GVim更改字体及大小 在命令模式下输入: set guifontlucida\ console:h14 其中&#xff0c;字体名有空格的话&#xff0c;要转义下. 2. FencView插件(Ver4.8)下载位置&#xff1a; http://vim.sourceforge.net/scripts/download_script.php?src_id17381 解压出来后&am…