Qt-----托盘功能[转]

添加两个成员变量

QSystemTrayIcon *trayicon;

QMenu *trayiconMenu;

 

添加一个槽函数用于响应在托盘图标及托盘菜单上的鼠标点击操作

void onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason);

 

在构造函数中对添加的两个变量进行初始化

 trayicon = new QSystemTrayIcon(this);

  //创建QIcon对象,参数是图标资源,值为项目的资源文件中图标的地址

  QIcon icon("F:/Windows QT/TrayIcon/bottom.png");

  trayiconMenu = new QMenu(this);

  //为托盘菜单添加菜单项

  trayiconMenu->addAction(ui->action_quit);

  //为托盘菜单添加分隔符

  trayiconMenu->addSeparator();

   //将创建的QIcon对象作为系统托盘图标

  trayicon->setIcon(icon);

  //显示托盘图标

  trayicon->show();

  //设置系统托盘提示

  trayicon->setToolTip(tr("托盘测试"));

  //将创建菜单作为系统托盘菜单   

  trayicon->setContextMenu(trayiconMenu);

    //在系统托盘显示气泡消息提示

  trayicon->showMessage(tr("hahaya"), tr("托盘测试"), QSystemTrayIcon::Information, 5000);

  //为系统托盘绑定单击信号的槽 即图标激活时

  connect(trayicon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason)));

 

实现槽函数onSystemTrayIconClicked

void MainWindow::onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason)

{

  switch(reason)

  {

  //单击

  case QSystemTrayIcon::Trigger:

  //双击

  case QSystemTrayIcon::DoubleClick:

      //恢复窗口显示

      this->setWindowState(Qt::WindowActive);

      this->show();

      break;

  default:

      break;

  }

}

 

5  当点击窗口的关闭按钮时,将程序托盘,则重写类的closeEvent函数

void MainWindow::closeEvent(QCloseEvent *event)

{

  if(trayicon->isVisible())

  {

      hide();

      event->ignore();

  }

}

 

点击“退出”菜单的槽函数,点击退出时托盘

void MainWindow::on_action_quit_triggered()

{

  this->hide();

  this->close();

}

 

  1. //mainwindow.h  
  2. #ifndef MAINWINDOW_H  
  3. #define MAINWINDOW_H  
  4. #include <QMainWindow>  
  5. #include <QSystemTrayIcon>  
  6. #include <QMenu>  
  7. #include <QCloseEvent>  
  8. namespace Ui {  
  9.   class MainWindow;  
  10. }  
  11. class MainWindow : public QMainWindow  
  12. {  
  13.   Q_OBJECT  
  14. public:  
  15.   explicit MainWindow(QWidget *parent = 0);  
  16.   ~MainWindow();  
  17. private:  
  18.   
  19.   Ui::MainWindow *ui;  
  20. private slots:  
  21.   void on_action_quit_triggered();  
  22.   void onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason);  
  23. protected:  
  24.   void closeEvent(QCloseEvent *event);  
  25. private:  
  26.   QSystemTrayIcon *trayicon;  
  27.   QMenu *trayiconMenu;  
  28. };  
  29. #endif // MAINWINDOW_H  


 

//mainwindow.cpp  
  1. #include <QtGui>  
  2. #include "mainwindow.h"  
  3. #include "ui_mainwindow.h"  
  4. MainWindow::MainWindow(QWidget *parent) :  
  5.   QMainWindow(parent),  
  6.   ui(new Ui::MainWindow)  
  7. {  
  8.   ui->setupUi(this);  
  9.   trayicon = new QSystemTrayIcon(this);  
  10.   //创建QIcon对象,参数是图标资源,值为项目的资源文件中图标的地址  
  11.   QIcon icon("F:/Windows QT/TrayIcon/bottom.png");  
  12.   trayiconMenu = new QMenu(this);  
  13.   //为托盘菜单添加菜单项  
  14.   trayiconMenu->addAction(ui->action_quit);  
  15.   //为托盘菜单添加分隔符  
  16.   trayiconMenu->addSeparator();  
  17.   //将创建的QIcon对象作为系统托盘图标  
  18.   trayicon->setIcon(icon);  
  19.   //显示托盘图标  
  20.   trayicon->show();  
  21.   //设置系统托盘提示  
  22.   trayicon->setToolTip(tr("托盘测试"));  
  23.   //将创建菜单作为系统托盘菜单  
  24.   trayicon->setContextMenu(trayiconMenu);  
  25.   //在系统托盘显示气泡消息提示  
  26.   trayicon->showMessage(tr("hahaya"), tr("托盘测试"), QSystemTrayIcon::Information, 5000);  
  27.   //为系统托盘绑定单击信号的槽 即图标激活时  
  28.   connect(trayicon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason)));  
  29. }  
  30. MainWindow::~MainWindow()  
  31. {  
  32.   delete ui;  
  33. }  
  34. void MainWindow::onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason)  
  35. {  
  36.   switch(reason)  
  37.   {  
  38.   //单击  
  39.   case QSystemTrayIcon::Trigger:  
  40.   //双击  
  41.   case QSystemTrayIcon::DoubleClick:  
  42.       //恢复窗口显示  
  43.       this->setWindowState(Qt::WindowActive);  
  44.       this->show();  
  45.       break;  
  46.   default:  
  47.       break;  
  48.   }  
  49. }  
  50. void MainWindow::closeEvent(QCloseEvent *event)  
  51. {  
  52.   if(trayicon->isVisible())  
  53.   {  
  54.       hide();  
  55.       event->ignore();  
  56.   }  
  57. }  
  58. void MainWindow::on_action_quit_triggered()  
  59. {  
  60.   this->hide();  
  61.   this->close();  
  62. }  


 

[
  1. //main.cpp  
  2. #include <QtGui/QApplication>  
  3. #include <QTextCodec>  
  4. #include "mainwindow.h"  
  5. int main(int argc, char *argv[])  
  6. {  
  7.   QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
  8.   QApplication a(argc, argv);  
  9.   MainWindow w;  
  10.   w.show();  
  11.   return a.exec();  
  12. }  

 

你可能感兴趣的:(qt)