Qt之任务栏系统托盘图标

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. }  

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Guangdong Qi

iOS开发常用之代码安全与密码

942
来自专栏進无尽的文章

精析-苹果开发者证书的实现机制

      在iOS开发过程中,不可避免的要和证书打交道,真机调试、App上架、打包给测试去测试等都需要搞证书。在此过程中我们会遇到很多的问题,但是如果掌握了真...

1772
来自专栏偏前端工程师的驿站

.Net魔法堂:史上最全的ActiveX开发教程——发布篇

一、 前言                                  接着上一篇《.Net魔法堂:史上最全的ActiveX开发教程——开发篇》,本篇讲述...

2426
来自专栏编程坑太多

js验证码倒计时

2695
来自专栏编程坑太多

springboot(22)同时支持http和https访问

7584
来自专栏偏前端工程师的驿站

.Net魔法堂:史上最全的ActiveX开发教程——部署篇

一、前言                                   接《.Net魔法堂:史上最全的ActiveX开发教程——发布篇》,后我们继续来部署...

1885
来自专栏移动端周边技术扩展

python收发邮件客户端

2603
来自专栏技术之路

QT5 动态链接库的创建和使用

记录一下QT5 动态链接库的创建和使用 在文章的最后有完成的代码供下载 1.创建动态链接库 先新建一个库项目 ? 选择chose进入下一下页面,类型选择共享库,...

1896
来自专栏华仔的技术笔记

Ubuntu系统搭建以太坊框架总结

2024
来自专栏狂码一生

QT新建文件、打开文件、保存文件

1603

扫码关注云+社区

领取腾讯云代金券