目录
前言:
【QT笔记|Qt实现最小化窗口到托盘图标】1.先看效果图
2.大致思路以及实现流程
3.具体代码以及解释
4.总结
前言: 使用QT开发桌面软件,将软件最小化至托盘这样的功能的是比较常见的,今天自己实现一下这个功能,并进行记录总结。
1.先看效果图
主要功能就是当软件开始运行,在系统托盘会自动出现一个关于本软件的系统托盘的图标,你右击这个图标,可以弹出一个菜单栏,这样的效果
2.大致思路以及实现流程 首先Qt本身就有一个系统托盘的类, QSystemTrayIcon类。
所以第一步:创建该类的对象,为该对象设置图标,然后show出来,托盘图标就能显示了。
第二步:要想右击的时候糖醋一个菜单栏,需要调用QSystemTrayIcon类的setContextMenu()函数,此时需要添加一个菜单栏就行了。
所以接下来看具体代码。
3.具体代码以及解释 需要加头文件
#include "qsystemtrayicon.h"
#include
.h文件中创建相应的对象:
QMenu* m_pTrayMennu;
//系统托盘右键菜单项
QSystemTrayIcon* m_pSystemTray;
//系统托盘图标
//右键菜单栏选项
QAction* m_pActionShow;
QAction* m_pActionHide;
QAction* m_pActionModel;
QAction* m_pActionSetting;
QAction* m_pActionQuit;
.cpp文件:
void CDesktopPet::CreatSystemTray()
{
//创建菜单对象和托盘图标对象
m_pTrayMennu = new CTrayMenu(this);
m_pSystemTray = new QSystemTrayIcon(this);
//创建菜单项
m_pActionShow = new QAction(tr("Show pet"), this);
m_pActionHide = new QAction(tr("Hide pet"), this);
m_pActionModel = new QAction(tr("Model selecte"), this);
m_pActionSetting = new QAction(tr("Setting"), this);
m_pActionQuit = new QAction(tr("Exit"), this);
//添加菜单项
m_pTrayMennu->addAction(m_pActionShow);
m_pTrayMennu->addAction(m_pActionHide);
m_pTrayMennu->addAction(m_pActionModel);
m_pTrayMennu->addAction(m_pActionSetting);
m_pTrayMennu->addSeparator();
m_pTrayMennu->addAction(m_pActionQuit);
//为系统托盘设置菜单为m_pTrayMennu
m_pSystemTray->setContextMenu(m_pTrayMennu);
m_pSystemTray->setIcon(QIcon(":/CDesktopPet/Resource/image/trayIcon.png"));
m_pSystemTray->show();
}
这是全部代码,需要注意的是最后三句代码:
1. m_pSystemTray->setContextMenu(m_pTrayMennu); 系统托盘类对象设置上下文菜单为(m_pTrayMennu);
2. m_pSystemTray->setIcon(QIcon(":/CDesktopPet/Resource/image/trayIcon.png")); 系统托盘类对象对象设置图标,这个必须有,不设置图标是显示不出来的。
3. m_pSystemTray->show(); 显示系统托盘类对象。
在新建项目的界面类的构造函数里调用CreatSystemTray()函数,就可以了!
如果还想把任务栏的系统图标给隐藏掉,可以加上这句:
setWindowFlags(Qt::Tool);
4.总结 该功能实现起来还是比较简单,其实还有很多后续工作需要继续完善,比如点击了退出菜单项,将程序退出;这个实现需要添加槽函数,来接受右键菜单项的信号,在相应的槽函数中直接调用退出函数QApplication::exit(0); 即可,在此小小记录一下。
推荐阅读
- JAVA后端面试|java 8 stream API
- 一起学Rust|【一起学Rust | 基础篇】rust函数与流程控制详解
- rust|【Rust 笔记】15-字符串与文本(上)
- c++数据结构与算法|c++类实例化的两种方式
- 算法|MPC入门与Matlab实现
- PHP|分享75个商务商城PHP源码,总有一款适合你
- 缓存|mybatis一级缓存和二级缓存的区别
- java|mybatis一级缓存和二级缓存的区别()
- java实战开发|阿里巴巴《Java开发手册(黄山版)》阅读笔记