小伙伴们会经常遇到一些托盘程序,有些程序关闭后,程序并没有退出,而是放入了托盘中,如下图:
文章图片
那qt是如何实现这样的办法呢,其实就是用到了 QSystemTrayIcon类,通常有两种方法去写,第一种比较简单,直接利用
QSystemTrayIcon ,来达到一些基本的托盘程序,也是本文章要讲的。第二种是继承QSystemTrayIcon类,这样子类设计可以使得托
盘程序更加功能强大,接下来给大家讲解简单的托盘:
文章图片
托盘也出现了程序:
文章图片
【qt|qt 之 QSystemTrayIcon(托盘程序整个例子)】
当我们关闭程序时候,
文章图片
弹出了消息框,程序没有退出,在托盘依旧可以找到它,并且右击出现菜单:
文章图片
点击恢复原来样子,或者双击托盘图标,可以恢复程序原来的位置;
下面我们来看代码部分:
对应的头文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include
#include //托盘使用的头文件namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QSystemTrayIcon *SysIcon;
QAction *min;
//最小化
QAction *max;
//最大化
QAction *restor;
//恢复
QAction *quit;
//退出
QMenu *menu;
private:
void closeEvent(QCloseEvent * event);
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
重写了closeEvent()函数,自定义了一个action函数:
对应的cpp文件:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#includeMainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
menu = new QMenu(this);
QIcon icon(":/images/images/QtIcon.ico");
SysIcon = new QSystemTrayIcon(this);
SysIcon->setIcon(icon);
SysIcon->setToolTip("Qt托盘");
min = new QAction("窗口最小化",this);
connect(min,&QAction::triggered,this,&MainWindow::hide);
//connect(min,SIGNAL(trigger()),this,&MainWindow::hide);
max = new QAction("窗口最大化",this);
connect(max,&QAction::triggered,this,&MainWindow::showMaximized);
restor = new QAction("恢复原来的样子",this);
connect(restor,&QAction::triggered,this,&MainWindow::showNormal);
quit = new QAction("退出",this);
//connect(quit,&QAction::triggered,this,&MainWindow::close);
connect(quit,&QAction::triggered,qApp,&QApplication::quit);
connect(SysIcon,&QSystemTrayIcon::activated,this,&MainWindow::on_activatedSysTrayIcon);
menu->addAction(min);
menu->addAction(max);
menu->addAction(restor);
menu->addSeparator();
//分割
menu->addAction(quit);
SysIcon->setContextMenu(menu);
SysIcon->show();
close();
}MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::closeEvent(QCloseEvent * event)
{
if(SysIcon->isVisible())
{
this->hide();
SysIcon->showMessage("Qt托盘","this is your first to get it");
event->ignore();
}
else {
event->accept();
}}void MainWindow::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {case QSystemTrayIcon::Trigger:
break;
case QSystemTrayIcon::DoubleClick:
this->show();
break;
default:
break;
}
}
文章图片
程序就是使用QAction 的变量绑定了界面不同的功能,其中:
connect(quit,&QAction::triggered,qApp,&QApplication::quit);
托盘菜单的退出菜单才是真的关闭整个程序。
当我们点击关闭按钮时候执行了:
void MainWindow::closeEvent(QCloseEvent * event)
{
if(SysIcon->isVisible())
{
this->hide();
SysIcon->showMessage("Qt托盘","this is your first to get it");
event->ignore();
}
else {
event->accept();
}}
当托盘还在的时候,界面影藏起来,消息使用ignore,这样窗口就不会关闭了,你学会了吗。
大家可以多想想,还有我们常见的东西,我们一起加油实现出来,让自己变得更加好。
我是比卡丘不皮,喜欢的朋友可以关注我的博客,一起学习,需要demo的同学可以私信我,希望点个赞吧。
推荐阅读
- GUI-PyQt5|python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
- GUI-PyQt5|python3GUI--历史上的今天 查看器 By:PyQt5(附源码)
- python小工具|python3GUI--打造一款时间管理工具By:PyQt5(附源码)
- GUI-PyQt5|python3GUI--疫情信息快速查看工具By:PyQt5(附源码)
- 蓝桥杯|2021第十二届蓝桥杯大赛软件赛省赛C/C++ 大学B组试题B杨辉三角形
- 算法练习|第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组(第一场真题 + 部分题解)
- 蓝桥杯|13、走方格
- #|第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组解析
- 蓝桥杯|蓝桥杯大赛 青少年创意编程 第十二届 C++组