Qt QSystemTrayIcon(托盘程序整个例子)

QSystemTrayIcon ,来达到一些基本的托盘程序,也是本文章要讲的。第二种是继承QSystemTrayIcon类,这样子类设计可以使得托

盘程序更加功能强大,接下来给大家讲解简单的托盘:

托盘也出现了程序:

当我们关闭程序时候,

弹出了消息框,程序没有退出,在托盘依旧可以找到它,并且右击出现菜单:

点击恢复原来样子,或者双击托盘图标,可以恢复程序原来的位置;

下面我们来看代码部分:

对应的头文件:

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QSystemTrayIcon> //托盘使用的头文件
 6 
 7 namespace Ui {
 8 class MainWindow;
 9 }
10 
11 class MainWindow : public QMainWindow
12 {
13     Q_OBJECT
14 private:
15     QSystemTrayIcon *SysIcon;
16     QAction *min; //最小化
17     QAction *max; //最大化
18     QAction *restor; //恢复
19     QAction *quit; //退出
20     QMenu *menu;
21 private:
22     void closeEvent(QCloseEvent * event);
23 public:
24     explicit MainWindow(QWidget *parent = nullptr);
25     ~MainWindow();
26 
27 
28 
29 private slots:
30     void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);
31 private:
32     Ui::MainWindow *ui;
33 };
34 
35 #endif // MAINWINDOW_H

重写了closeEvent()函数,自定义了一个action函数:

对应的cpp文件:

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 #include<QCloseEvent>
 4 
 5 MainWindow::MainWindow(QWidget *parent) :
 6     QMainWindow(parent),
 7     ui(new Ui::MainWindow)
 8 {
 9     ui->setupUi(this);
10     menu = new QMenu(this);
11     QIcon icon(":/images/images/QtIcon.ico");
12     SysIcon = new QSystemTrayIcon(this);
13     SysIcon->setIcon(icon);
14     SysIcon->setToolTip("Qt托盘");
15     min = new QAction("窗口最小化",this);
16     connect(min,&QAction::triggered,this,&MainWindow::hide);
17  //   connect(min,SIGNAL(trigger()),this,&MainWindow::hide);
18     max = new QAction("窗口最大化",this);
19     connect(max,&QAction::triggered,this,&MainWindow::showMaximized);
20     restor = new QAction("恢复原来的样子",this);
21     connect(restor,&QAction::triggered,this,&MainWindow::showNormal);
22     quit = new QAction("退出",this);
23 //    connect(quit,&QAction::triggered,this,&MainWindow::close);
24     connect(quit,&QAction::triggered,qApp,&QApplication::quit);
25     connect(SysIcon,&QSystemTrayIcon::activated,this,&MainWindow::on_activatedSysTrayIcon);
26 
27     menu->addAction(min);
28     menu->addAction(max);
29     menu->addAction(restor);
30     menu->addSeparator(); //分割
31     menu->addAction(quit);
32     SysIcon->setContextMenu(menu);
33     SysIcon->show();
34     close();
35 }
36 
37 MainWindow::~MainWindow()
38 {
39     delete ui;
40 }
41 
42 void MainWindow::closeEvent(QCloseEvent * event)
43 {
44    if(SysIcon->isVisible())
45    {
46        this->hide();
47        SysIcon->showMessage("Qt托盘","this is your first to get it");
48        event->ignore();
49    }
50    else {
51        event->accept();
52    }
53 
54 }
55 
56 void MainWindow::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
57 {
58     switch (reason) {
59 
60     case QSystemTrayIcon::Trigger:
61         break;
62     case QSystemTrayIcon::DoubleClick:
63         this->show();
64         break;
65     default:
66         break;
67 
68     }
69 }

程序就是使用QAction 的变量绑定了界面不同的功能,其中:

connect(quit,&QAction::triggered,qApp,&QApplication::quit);

托盘菜单的退出菜单才是真的关闭整个程序。

当我们点击关闭按钮时候执行了:

 1 void MainWindow::closeEvent(QCloseEvent * event)
 2 {
 3    if(SysIcon->isVisible())
 4    {
 5        this->hide();
 6        SysIcon->showMessage("Qt托盘","this is your first to get it");
 7        event->ignore();
 8    }
 9    else {
10        event->accept();
11    }
12 }

当托盘还在的时候,界面影藏起来,消息使用ignore,这样窗口就不会关闭了,你学会了吗。

大家可以多想想,还有我们常见的东西,我们一起加油实现出来,让自己变得更加好。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值