首页 > 编程语言 >Qt QSystemTrayIcon(托盘程序整个例子)

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

时间:2022-11-10 10:36:16浏览次数:52  
标签:Qt menu SysIcon QAction QSystemTrayIcon 托盘 MainWindow

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

相关文章

  • Qt 托盘QSystemTrayIcon的基础使用
    一、效果1、点击“闪烁”按钮可以模拟消息闪动,点击后弹出消息详情对话框;2、托盘右键菜单包括:“显示”和“关闭”。3、双击托盘显示程序,关闭后隐藏到托盘。二、源码主......
  • Windows下安装搭建MQTT服务器
    服务器常用的有emqx,还有apacheapolle,这里用的是emqx服务端以及客户端可以使用MQTTnet(NuGet包)一、MQTT服务器(emqx)搭建1.下载服务器MQTTBroker从https://www.emqx.i......
  • Qt 隐藏mainWindow
    开始时不显示主界面,登陆按钮进行确认后再显示-尝试:在mainWindow这一类中调用hide()函数,但主窗口在仍会显示-解决:在main()函数中删除w.show()(w是mainWindow类),main()window......
  • Qt-Qt使用回调函数方(callback)
     实例代码:.pro1QT+=coregui23greaterThan(QT_MAJOR_VERSION,4):QT+=widgets45CONFIG+=c++1167#Thefollowingdefinemakesy......
  • Qt编写ffmpeg本地摄像头显示(16路本地摄像头占用3.2%CPU)
    一、前言内核ffmpeg除了支持本地文件、网络文件、各种视频流播放以外,还支持打开本地摄像头,和正常的解析流程一致,唯一的区别就是在avformat_open_input第三个参数传入个AVI......
  • AIRIOT物联网低代码平台如何配置MQTT驱动?
    MQTT驱动配置简介MQTT全称为消息队列遥测传输(英语:MessageQueuingTelemetryTransport),是ISO标准(ISO/IECPRF20922)下基于发布(Publish)/订阅(Subscribe)范式的消息协......
  • VS+Qt - Visual Studio2017+Qt5.14安装配置教程
    转载自:https://zhuanlan.zhihu.com/p/351084915简介1、VisualStudio是一个集成开发IDE:集成开发环境(IDE,IntegratedDevelopmentEnvironment)是用于提供程序开发环境的......
  • 自定义的Qt仪表盘控件
    我做的仪表盘控件是个功能简单的显示控件。它默认的显示范围是[0,100],不能修改它的显示范围,因为不同的数值显示在前界面上的效果不同,可能导致显示重叠。成员函数只有一个s......
  • Qt 系统托盘图标不显示的问题
    QIconicon=QIcon(":/recources/recources/logo.ico");//将icon设到QSystemTrayIcon对象中mSysTrayIcon->setIcon(icon);这是设置语句,其他的都实现了,就是托盘显示不了图......
  • VS_QT——连接MySQL数据库
    原文链接连接2链接3           ......