Qt最小化到托盘
https://blog.csdn.net/qq_16542775/article/details/86293180
main.cpp
#include <QtGui> #include "mwin.h" int main(int argc,char *argv[]) { QApplication app(argc,argv); //***三行编码设置,保证中文字符*** //本机电脑是UTF-8编码,其他电脑自行调试修改编码 QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); MWin *win=new MWin(); win->show(); return app.exec(); }
mwin.h
#ifndef MWIN_H #define MWIN_H #include <QWidget> #include <QtGui> class MWin : public QWidget { Q_OBJECT public: explicit MWin(QWidget *parent = 0); void init();//初始化函数 QSystemTrayIcon *tray;//托盘图标 QMenu *menu;//托盘菜单 QAction *reset;//菜单实现功能:恢复窗口 QAction *quit;//菜单实现功能:退出程序 protected: void closeEvent(QCloseEvent *event);//由于要关闭窗口变为隐藏至托盘图标,所以要重写close事件 signals: public slots: void TrayIconAction(QSystemTrayIcon::ActivationReason reason);//对托盘图标操作的槽:本代码实现单机图标恢复窗口功能 }; #endif // MWIN_H
mwin.cpp
#include "mwin.h" MWin::MWin( QWidget *parent ) : QWidget( parent ) { init(); /* 初始化 */ } void MWin::init() { /****主窗口****/ this->setFixedSize( 200, 200 ); this->setWindowTitle( "托盘APP" ); /****托盘*** */ tray = new QSystemTrayIcon( this ); /* 初始化托盘对象tray */ tray->setIcon( QIcon( QPixmap( ":/image/ico.png" ) ) ); /* 设定托盘图标,引号内是自定义的png图片路径 */ tray->show(); /* 让托盘图标显示在系统托盘上 */ QObject::connect( tray, SIGNAL( activated( QSystemTrayIcon::ActivationReason ) ), this, SLOT( TrayIconAction( QSystemTrayIcon::ActivationReason ) ) ); /* 连接信号与槽,实现单击图标恢复窗口的功能,槽是自定义的槽 */ /****初始化托盘菜单及功能****/ menu = new QMenu( this ); /* 初始化菜单 */ reset = new QAction( this ); /* 初始化恢复窗口 */ reset->setText( "显示窗口" ); QObject::connect( reset, SIGNAL( triggered() ), this, SLOT( showNormal() ) ); /* 菜单中的显示窗口,单击连接显示窗口 */ quit = new QAction( this ); /* 初始化退出程序 */ quit->setText( "退出程序" ); QObject::connect( quit, SIGNAL( triggered() ), qApp, SLOT( quit() ) ); /* 菜单中的退出程序,单击连接退出</span> */ /* * qApp,是Qt自带的demo中的知识点,查了一下文档,qApp是Qt中所有app的指针,关闭它就可以关闭当前的程序 * 之所以不用this,close(),是由于软件要求关闭改为最小化到托盘,所以close()的功能已经不再是关闭窗口的功能,所以要另寻方法 * 将定义好的菜单加入托盘的菜单模块中 */ tray->setContextMenu( menu ); menu->addAction( reset ); menu->addAction( quit ); } /* ***重置关闭close()*** */ void MWin::closeEvent( QCloseEvent *event ) { hide(); /* 隐藏窗口 */ event->ignore(); /* 忽略关闭事件 */ } /* * 因为实现的是关闭窗口至系统托盘,所以我们先将窗口hide()隐藏,再忽略关闭窗口功能event->ignore()即可。 * ***托盘图标槽*** */ void MWin::TrayIconAction( QSystemTrayIcon::ActivationReason reason ) /* 参数是Qt的保留字,表示对托盘图标的操作,该槽函数功能只实现了单击功能,可以实现其他功能比如双击、中击,具体可查文档或者Qt自带demo(关键字tray) */ { if ( reason == QSystemTrayIcon::Trigger ) this->showNormal(); /* 如果对图标进行单击,则显示正常大小的窗口 */ }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧