QSystemTrayIcon ,来达到一些基本的托盘程序,也是本文章要讲的。第二种是继承QSystemTrayIcon类,这样子类设计可以使得托
盘程序更加功能强大,接下来给大家讲解简单的托盘:
托盘也出现了程序:
当我们关闭程序时候,
弹出了消息框,程序没有退出,在托盘依旧可以找到它,并且右击出现菜单:
点击恢复原来样子,或者双击托盘图标,可以恢复程序原来的位置;
下面我们来看代码部分:
对应的头文件:
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,menu,SysIcon,QAction,QSystemTrayIcon,托盘,MainWindow From: https://www.cnblogs.com/ybqjymy/p/16876241.html