QT5.8-程序最小化到托盘
来源:互联网 发布:x77论坛大陆永久域名 编辑:程序博客网 时间:2024/05/17 00:13
对于类似于后台服务的界面非常简单的程序,不需要总显示UI界面,最小化至托盘就是比较好的一个选择.
第一步:实现程序启动直接最小化至托盘图标.
1.新建一个QT项目(本例基类QQWidget,其他基类类似), 不勾选生成ui文件.
2.寻找一个图标文件(icon.ico),以供程序在托盘显示.向项目中添加一个资源文件,并添加prefix包含图标文件.
3.修改main.cpp中的w.show()为w.hide().托盘图标功能主要使用QSystemTrayIcon类,向窗口头文件中添加代码:
#include <QWidget>#include <QSystemTrayIcon>class main_win : public QWidget{ Q_OBJECTpublic: main_win (QWidget *parent = 0); ~main_win ();private: QSystemTrayIcon *m_tray_icon;};
4.在CPP文件中,修改构造函数,并添加槽函数的实现:
#include "main_win .h"main_win ::main_win (QWidget *parent) : QWidget(parent){ QIcon icon = QIcon(":/icons/tray_icon/images/ico_32X32.ico"); setWindowIcon(icon); this->m_tray_icon = new QSystemTrayIcon(this); m_tray_icon->setIcon(icon); m_tray_icon->setToolTip(trUtf8("数据上传程序")); m_tray_icon->show();}main_win ::~main_win (){}
此时启动程序已经可以在托盘看到图标,并且任务栏也没有对应的程序图标.不过,此时对托盘图标不能做任何操作,只能在任务管理器里强制关闭进程.所以,我们需要进行改进.
第二步:给托盘图标添加双击显示主界面的功能
1.继续修改main_win.h, 添加槽函数声明.QSystemTrayIcon::ActivationReason 是一个枚举类型,表示托盘图标激活的方式.
#include <QWidget>#include <QSystemTrayIcon>class main_win : public QWidget{ Q_OBJECTpublic: main_win (QWidget *parent = 0); ~main_win ();private: QSystemTrayIcon *m_tray_icon;private slots: void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);};
4.修改main_win.cpp.添加槽函数实现,并鱼托盘图标对象链接.
#include "main_win .h"main_win ::main_win (QWidget *parent) : QWidget(parent){ QIcon icon = QIcon(":/icons/tray_icon/images/ico_32X32.ico"); setWindowIcon(icon); this->m_tray_icon = new QSystemTrayIcon(this); m_tray_icon->setIcon(icon); m_tray_icon->setToolTip(trUtf8("数据上传程序")); connect(m_tray_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this, SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason) ) ); m_tray_icon->show();}main_win ::~main_win (){}void main_win ::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason){ switch (reason) { case QSystemTrayIcon::Trigger: // click break; case QSystemTrayIcon::DoubleClick: this->show(); break; default: break; }}
此时,启动程序,双击托盘图标,主界面就可以显示出来.
如果希望对托盘图标添加更多的交互,可以给托盘对象添加快捷菜单的方式.
第三步:添加托盘菜单
1.菜单功能需要用到QAction和QMenu类.给托盘添加两个菜单项,显示主界面和退出,修改main_win.h,添加代码如下:
#include <QWidget>#include <QSystemTrayIcon>#include <QAction>#include <QMenu>class main_win : public QWidget{ Q_OBJECTpublic: main_win (QWidget *parent = 0); ~main_win ();private: QSystemTrayIcon *m_tray_icon; QMenu *m_tray_menu; QAction *m_action_quit; QAction *m_action_open;public: void createActions(); void createMenus();private slots: void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason); void on_quit_app(); void on_show_main_win();};
4.修改main_win.cpp文件,添加对应的实现.
#include "main_win.h"main_win::main_win(QWidget *parent) : QWidget(parent){ QIcon icon = QIcon(":/icons/tray_icon/images/ico_32X32.ico"); setWindowIcon(icon); this->m_tray_icon = new QSystemTrayIcon(this); m_tray_icon->setIcon(icon); m_tray_icon->setToolTip(trUtf8("数据上传程序")); // trar icon menu createActions(); createMenus(); connect(m_tray_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this, SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason) ) ); m_tray_icon->show();}main_win::~main_win(){}void main_win::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason){ switch (reason) { case QSystemTrayIcon::Trigger: // click break; case QSystemTrayIcon::DoubleClick: this->show(); break; default: break; }}void main_win::on_quit_app(){ exit(0);}void main_win::createActions(){ m_action_quit = new QAction(trUtf8("退出"),this); connect(m_action_quit, SIGNAL(triggered()), this, SLOT(on_quit_app())); m_action_open = new QAction(trUtf8("显示主界面"), this); connect(m_action_open, SIGNAL(triggered()),this, SLOT(on_show_main_win()));}void main_win::createMenus(){ m_tray_menu = new QMenu(this); m_tray_menu->addAction(m_action_open); m_tray_menu->addSeparator(); m_tray_menu->addAction(m_action_quit); m_tray_icon->setContextMenu(m_tray_menu);}void main_win::on_show_main_win(){ this->show();}
此时,启动程序,右键托盘图标,会出现对应的菜单操作.
0 0
- QT5.8-程序最小化到托盘
- 程序最小化到托盘
- 程序最小化到托盘
- VC最小化程序到托盘
- VC最小化程序到托盘
- VC程序最小化到托盘
- VC最小化程序到托盘
- VC最小化到托盘程序
- MFC程序最小化到托盘
- MFC最小化程序到托盘
- MFC最小化程序到托盘
- MFC程序最小化到托盘
- VC程序最小化到托盘
- VC最小化程序到托盘
- Delphi程序最小化到托盘
- VC最小化到托盘程序
- MFC程序最小化到托盘
- MFC程序最小化到托盘
- NIO与标准IO不同
- java面试题汇总
- 前端-JavaScript
- 有哪些网店代运营公司
- Knockout应用开发指南 第三章:绑定语法(2)
- QT5.8-程序最小化到托盘
- JobScheduler
- 设计模式1-原则
- 怎样设计才能让文字排版更好看(一)
- 【MOOC】Python网络爬虫与信息提取-北京理工大学-part 2
- Spark WordCount
- 解决Mac终端exit退出不爽
- 理解UND0-2 事务
- D3.js——理解 update, enter, exit 的使用