目录

一、现象

二、托盘程序的QT实现

1、功能说明

2、使用的类

3、代码实现

三、windows系统托盘刷新

1、托盘刷新代码

2、托盘刷新代码的调用


一、现象

windows下当程序关闭,有时系统右下角的系统托盘图标还会存在。如不停的关闭和打开程序,任务栏右下角通知区域,同一个图标重复很多。Qt使用QSystemTrayIcon类开发时,也会存在这个问题。如何解决?
方法是调用windows API。

二、托盘程序的QT实现

1、功能说明

对于Qt GUI程序,如果想要实现当最小化时,程序从任务栏消失,在系统托盘显示一个图标,表示此程序,并能在托盘内通过双击或者菜单使程序界面恢复。

2、使用的类

主要使用的此类:QSystemTrayIcon。其中QSystemTrayIcon是主要操作系统托盘的操作类,通过此类,可以在托盘显示指定程序的图标,显示指定消息,显示菜单等。

3、代码实现

#ifndef TESTTRAYICON_H
#define TESTTRAYICON_H#include <QtGui/QMainWindow>
#include "ui_testtrayicon.h"class testTrayIcon : public QMainWindow
{Q_OBJECTpublic:testTrayIcon(QWidget *parent = 0, Qt::WFlags flags = 0);~testTrayIcon();private:Ui::testTrayIconClass ui;
};#endif // TESTTRAYICON_H
#include "testtrayicon.h"
#include <QSystemTrayIcon>
testTrayIcon::testTrayIcon(QWidget *parent, Qt::WFlags flags): QMainWindow(parent, flags)
{ui.setupUi(this);QIcon icon = QIcon( ":/logo.png" );QSystemTrayIcon *trayIcon = new QSystemTrayIcon( this );trayIcon->setIcon(icon);trayIcon->setToolTip(tr( "hello" ));QString titlec=tr( "hello" );QString textc=tr( "hello" );trayIcon->show();trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Information,5000);QMenu*pMenu=new QMenu(this);pMenu->addAction("test1");pMenu->addAction("test2");trayIcon->setContextMenu(pMenu);
}testTrayIcon::~testTrayIcon()
{}
#include "testtrayicon.h"
#include <QtGui/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);testTrayIcon w;//w.show();w.hide();return a.exec();
}

三、windows系统托盘刷新

1、托盘刷新代码

#ifdef WIN32
#include <Windows.h>
void RefreshIcon()//任务栏图标刷新一遍
{
//任务栏窗口   HWND hShellTrayWnd = FindWindow(L"Shell_TrayWnd",NULL);
//任务栏右边托盘图标+时间区
HWND hTrayNotifyWnd = FindWindowEx(hShellTrayWnd,0,L"TrayNotifyWnd",NULL);   //不同系统可能有可能没有这层
HWND hSysPager = FindWindowEx(hTrayNotifyWnd,0,L"SysPager",NULL);
//托盘图标窗口
HWND hToolbarWindow32;
if (hSysPager)
{
hToolbarWindow32 = FindWindowEx(hSysPager,0,L"ToolbarWindow32",NULL);
}else
{
hToolbarWindow32 = FindWindowEx(hTrayNotifyWnd,0,L"ToolbarWindow32",NULL);
}
if (hToolbarWindow32)
{
RECT r;
GetWindowRect(hToolbarWindow32,&r);
int width = r.right - r.left;
int height = r.bottom - r.top;
//从任务栏中间从左到右 MOUSEMOVE一遍,所有图标状态会被更新
for (int x = 1; x<width; x++)
{
SendMessage(hToolbarWindow32,WM_MOUSEMOVE,0,MAKELPARAM(x,height/2));
}  } }
#endif

2、托盘刷新代码的调用

#include "testtrayicon.h"
#include <QSystemTrayIcon>
#ifdef WIN32
#include <Windows.h>
void RefreshIcon()//任务栏图标刷新一遍
{    //任务栏窗口   HWND hShellTrayWnd = FindWindow(L"Shell_TrayWnd",NULL);    //任务栏右边托盘图标+时间区    HWND hTrayNotifyWnd = FindWindowEx(hShellTrayWnd,0,L"TrayNotifyWnd",NULL);   //不同系统可能有可能没有这层    HWND hSysPager = FindWindowEx(hTrayNotifyWnd,0,L"SysPager",NULL);    //托盘图标窗口    HWND hToolbarWindow32;    if (hSysPager)    {        hToolbarWindow32 = FindWindowEx(hSysPager,0,L"ToolbarWindow32",NULL);    }else {hToolbarWindow32 = FindWindowEx(hTrayNotifyWnd,0,L"ToolbarWindow32",NULL);   } if (hToolbarWindow32) {RECT r; GetWindowRect(hToolbarWindow32,&r); int width = r.right - r.left; int height = r.bottom - r.top; //从任务栏中间从左到右 MOUSEMOVE一遍,所有图标状态会被更新for (int x = 1; x<width; x++){  SendMessage(hToolbarWindow32,WM_MOUSEMOVE,0,MAKELPARAM(x,height/2)); }  } }
#endiftestTrayIcon::testTrayIcon(QWidget *parent, Qt::WFlags flags): QMainWindow(parent, flags)
{ui.setupUi(this);QIcon icon = QIcon( ":/logo.png" );QSystemTrayIcon *trayIcon = new QSystemTrayIcon( this );trayIcon->setIcon(icon);trayIcon->setToolTip(tr( "hello" ));QString titlec=tr( "hello" );QString textc=tr( "hello" );trayIcon->show();trayIcon->showMessage(titlec,textc,QSystemTrayIcon::Information,5000);QMenu*pMenu=new QMenu(this);pMenu->addAction("test1");pMenu->addAction("test2");trayIcon->setContextMenu(pMenu);RefreshIcon();
}testTrayIcon::~testTrayIcon()
{}

Windows下QT实现托盘程序及系统托盘刷新相关推荐

  1. Windows下QT设置应用程序(exe)图标、任务栏托盘图标、任务栏窗口图标

    1. 设置应用程序(exe)图标 在Qt助手(QT Assistant)中,输入"setting",可以看到下面的列表中有Setting the Application Icon, ...

  2. Windows下Qt程序打包

    Windows下Qt程序打包 将windeployqt.exe 目录添加到系统环境变量 windeployqt.exe目录如下: 命令行打包 1.打开命令行 2.执行打包命令 windeployqt ...

  3. qt程序在Linux下字体乱了,解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!...

    本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开W ...

  4. Windows下Qt Creator设置IDE菜单字体样式

    Windows下Qt Creator设置IDE菜单字体样式 本文为解决以下问题: IDE的菜单字体太小 IDE的菜单字体样式,可以更换为微软雅黑 创建样式文件 在Qt Creator目录下C:\Qt\ ...

  5. 关于linux下网络服务器和windows下Qt客户端的通信(图片文件显示)

    关于最近比较火的物联网视频监控项目,在这里给大家分享下图片传输这一块,首先客户端显示是在Windows下Qt中,服务器是在linux系统ubuntu中,服务端打开本地两张图片循环发送给客户端Qt进行显 ...

  6. c语言与qt编写安卓,Windows下Qt for Android 编译安卓C语言可执行程序

    作为 C/C++ 程序员,有时候我们希望在安卓上运行从 C/C++ 生成的可执行程序,而不是在 Java 中通过 jni 的方式来调用 C 动态库.有两个途径可以达到这个目的:一 作为 C/C++ 程 ...

  7. linux32位运行64位程序,32位windows下可以运行的程序在64位linux下报错

    已结贴√ 问题点数:20 回复次数:3 32位windows下可以运行的程序在64位linux下报错 filt.c在32位windows code:blocks 10.05下运行无任何异样. 传到64 ...

  8. 实现Windows下Qt扫描U盘的两种方式

    参考网上资源,总结了如下实现Windows下Qt扫描U盘的两种方式:. 方式1: 检测Windows的事件–WM_DEVICECHANGE 缺点:想要检测时,必须发生过一次U盘插拔动作,需要手动&qu ...

  9. Windows下如何快速查看并导出系统详细信息(计算机名、操作系统、系统制造商、系统型号、BIOS、CPU及内存大小)

    Windows下如何快速查看并导出系统详细信息 使用dxdiag 正文 Win + R键打开命令行 输入dxdiag回车,就可以看到如下系统信息. 通过下一页按钮可以查看显卡.声卡及输入输出设备及驱动 ...

最新文章

  1. C#中方法参数的四种类型
  2. Android 改变窗口标题栏的布局
  3. 全国计算机二级qq闪退,电脑上QQ闪退怎么回事?各个系统版本电脑QQ闪退现象的解决方法介绍...
  4. Redhat中设置环境变量PATH
  5. 【转】jquery 注册事件的方法
  6. java mongodb 使用场景_mongodb使用场景一般是什么?mongodb有哪些基本命令?
  7. apache axis 1.4的invoke方法设置超时_Kubernetes 网络故障常见排查方法
  8. 中油C语言第一次在线作业,中石油华东《程序设计(C语言)》2020年春季学期在线作业(二)...
  9. Windows 平台安装 MongoDB
  10. Entity FrameWork利用Database.SqlQueryT执行存储过程并返回参数
  11. SPOJ LIS2 Another Longest Increasing Subsequence Problem 三维偏序最长链 CDQ分治
  12. 设置自增递增零开始_SnowflakeId雪花ID算法,分布式自增ID应用
  13. 朴素版prim算法求最小生成树
  14. Atitit 摄像头与主机连接方式大总结
  15. paip.c++ 正则表达式的应用跟普通正则表达式的区别以及特别注意点总
  16. 语言(文化)代码与国家地区对照表
  17. imagecopyresampled要生成彩色却生成了灰色图片
  18. 可测函数积分的进一步性质
  19. php导航自助收录源码,最近网上流行的导航网秒收录网站php源码
  20. 如何做一个根据自己的需求做一个完美的商品详情页?

热门文章

  1. Java使用PDFBox操作PDF文件
  2. 冰箱制冷系统管道油堵故障的排除方法
  3. 【龙芯1B例程】:串口中断实验
  4. 外汇新手入门学习篇(了解相关计算)
  5. UOJ176 新年的繁荣
  6. TIDB简介及TIDB部署、原理和使用介绍
  7. 服务器草稿位置6,【记录】寻找Thunderbird中邮件的草稿保存的位置
  8. 如何压缩png图片的大小?png图片怎么压缩?
  9. php控制wifi上网时长,怎么限制wifi网速 TP-LINK无线路由器设置方法【步骤方法】...
  10. VUE+WebPack:开发一款太空版植物大战僵尸的前端页游