前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt之任务栏系统托盘图标

Qt之任务栏系统托盘图标

作者头像
bear_fish
发布2018-09-20 14:49:30
2.7K0
发布2018-09-20 14:49:30
举报

http://blog.csdn.net/qivan/article/details/7506306

托盘图标,一个自己脑子出现很久的词,可惜自己都没动手去实现。最近看见的,听见的多了,自己也感兴趣就弄弄了,感觉还蛮简单了。

贴出效果图:

那么多功能,其实就一个类就搞定了,那就是QSystemTrayIcon

 头文件(主要 1.声明菜单相关动作 2.声明系统托盘对象,以及相关托盘槽函数 3.关闭事件)

  1. #ifndef SYSTEMTRAYICON_H
  2. #define SYSTEMTRAYICON_H
  3. #include <QMainWindow>
  4. #include <QMenu>
  5. #include <QSystemTrayIcon>
  6. #include <QCloseEvent>
  7. namespace Ui {  
  8. class SystemTrayIcon;  
  9. }  
  10. class SystemTrayIcon : public QMainWindow  
  11. {  
  12.     Q_OBJECT  
  13. public:  
  14. explicit SystemTrayIcon(QWidget *parent = 0);  
  15.     ~SystemTrayIcon();  
  16. void CreatTrayMenu();  
  17. void CreatTrayIcon();  
  18.     QSystemTrayIcon *myTrayIcon;  
  19.     QMenu *myMenu;  
  20.     QAction *miniSizeAction;  
  21.     QAction *maxSizeAction;  
  22.     QAction *restoreWinAction;  
  23.     QAction *quitAction;  
  24. private:  
  25.     Ui::SystemTrayIcon *ui;  
  26. public slots:  
  27. void iconActivated(QSystemTrayIcon::ActivationReason reason);  
  28. protected:  
  29. void closeEvent(QCloseEvent *event);  
  30. };  
  31. #endif // SYSTEMTRAYICON_H

 源文件(1.创建上下文菜单 2.创建系统托盘,实现相关功能)

  1. #include "SystemTrayIcon.h"
  2. #include "ui_SystemTrayIcon.h"
  3. #include <QSystemTrayIcon>
  4. SystemTrayIcon::SystemTrayIcon(QWidget *parent) :  
  5.     QMainWindow(parent),  
  6.     ui(new Ui::SystemTrayIcon)  
  7. {  
  8.     ui->setupUi(this);  
  9.     CreatTrayIcon();  
  10. }  
  11. SystemTrayIcon::~SystemTrayIcon()  
  12. {  
  13. delete ui;  
  14. }  
  15. void SystemTrayIcon::CreatTrayMenu()  
  16. {  
  17.     miniSizeAction = new QAction("最小化(&N)",this);  
  18.     maxSizeAction = new QAction("最大化(&X)",this);  
  19.     restoreWinAction = new QAction("还 原(&R)",this);  
  20.     quitAction = new QAction("退出(&Q)",this);  
  21. this->connect(miniSizeAction,SIGNAL(triggered()),this,SLOT(hide()));  
  22. this->connect(maxSizeAction,SIGNAL(triggered()),this,SLOT(showMaximized()));  
  23. this->connect(restoreWinAction,SIGNAL(triggered()),this,SLOT(showNormal()));  
  24. this->connect(quitAction,SIGNAL(triggered()),qApp,SLOT(quit()));  
  25.     myMenu = new QMenu((QWidget*)QApplication::desktop());  
  26.     myMenu->addAction(miniSizeAction);  
  27.     myMenu->addAction(maxSizeAction);  
  28.     myMenu->addAction(restoreWinAction);  
  29.     myMenu->addSeparator();     //加入一个分离符
  30.     myMenu->addAction(quitAction);  
  31. }  
  32. void SystemTrayIcon::CreatTrayIcon()  
  33. {  
  34.     CreatTrayMenu();  
  35. if (!QSystemTrayIcon::isSystemTrayAvailable())      //判断系统是否支持系统托盘图标
  36.     {  
  37. return;  
  38.     }  
  39.     myTrayIcon = new QSystemTrayIcon(this);  
  40.     myTrayIcon->setIcon(QIcon("mytrayIcon.ico"));   //设置图标图片
  41.     setWindowIcon(QIcon("mytrayIcon.ico"));  //把图片设置到窗口上
  42.     myTrayIcon->setToolTip("SystemTrayIcon V1.0");    //托盘时,鼠标放上去的提示信息
  43.     myTrayIcon->showMessage("SystemTrayIcon","Hi,This is my trayIcon",QSystemTrayIcon::Information,10000);  
  44.     myTrayIcon->setContextMenu(myMenu);     //设置托盘上下文菜单
  45.     myTrayIcon->show();  
  46. this->connect(myTrayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));  
  47. }  
  48. void SystemTrayIcon::iconActivated(QSystemTrayIcon::ActivationReason reason)  
  49. {  
  50. switch(reason)  
  51.     {  
  52. case QSystemTrayIcon::Trigger:  
  53. case QSystemTrayIcon::DoubleClick:  
  54.         showNormal();  
  55. break;  
  56. case QSystemTrayIcon::MiddleClick:  
  57.         myTrayIcon->showMessage("SystemTrayIcon","Hi,This is my trayIcon",QSystemTrayIcon::Information,10000);  
  58. break;  
  59. default:  
  60. break;  
  61.     }  
  62. }  
  63. void SystemTrayIcon::closeEvent(QCloseEvent *event)  
  64. {  
  65. if (myTrayIcon->isVisible())  
  66.     {  
  67.         myTrayIcon->showMessage("SystemTrayIcon","Hi,This is my trayIcon",QSystemTrayIcon::Information,5000);  
  68.         hide();     //最小化
  69.         event->ignore();  
  70.     }  
  71. else
  72.         event->accept();  
  73. }  

大家有兴趣的话,可以交流交流

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年04月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档