Qt之任务栏系统托盘图标

时间:2022-05-05 22:20:53

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

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

 

贴出效果图:

Qt之任务栏系统托盘图标

 

Qt之任务栏系统托盘图标

 

Qt之任务栏系统托盘图标

 

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

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

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

 


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