简述
QSystemTrayIcon类为应用程序在系统托盘中提供一个图标。
现代操作系统通常在桌面上提供一个特殊的区域,称为系统托盘或通知区域,长时间运行的应用程序可以显示图标和短消息。
托盘区域
应用的右键目录
QSystemTrayIcon 中有两个比较重要的枚举
此枚举描述了系统托盘被激活的原因。
QSystemTrayIcon::Unknown 0 未知原因
QSystemTrayIcon::Context 1 系统托盘的上下文菜单请求
QSystemTrayIcon::DoubleClick 2 双击系统托盘
QSystemTrayIcon::Trigger 3 单击系统托盘
QSystemTrayIcon::MiddleClick 4 鼠标中键点击系统托盘
枚举QSystemTrayIcon::MessageIcon:
此枚举描述了显示气球消息时所显示的图标。
常量 值 描述
QSystemTrayIcon::NoIcon 0 无图标显示
QSystemTrayIcon::Information 1 一个信息图标显示
QSystemTrayIcon::Warning 2 一个标准的警告图标显示
QSystemTrayIcon::Critical 3 一个严重的警告图标显示
我简单写一个,希望可以帮到你
代码如下
manwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QAction>
#include <QCloseEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void initTray();
private:
void closeEvent(QCloseEvent * event);
private slots:
void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);
private:
Ui::MainWindow *ui;
QSystemTrayIcon *m_tray = nullptr;
QMenu *m_menu = nullptr;
QAction *m_min = nullptr; //最小化
QAction *m_max = nullptr; //最大化
QAction *m_restor = nullptr; //恢复
QAction *m_quit = nullptr; //退出
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
initTray();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initTray()
{
m_menu = new QMenu(this);
QIcon icon(":/icon/file.png");
m_tray = new QSystemTrayIcon(this);
m_tray->setIcon(icon);
m_tray->setToolTip("Qt托盘");
m_min = new QAction("最小化",this);
m_min->setIcon(QIcon(":/icon/dataicon.png"));
connect(m_min,&QAction::triggered,this,&MainWindow::hide);
m_max = new QAction("最大化",this);
m_max->setIcon(QIcon(":/icon/dataicon.png"));
connect(m_max,&QAction::triggered,this,&MainWindow::showMaximized);
m_restor = new QAction("恢复",this);
m_restor->setIcon(QIcon(":/icon/dataicon.png"));
connect(m_restor,&QAction::triggered,this,&MainWindow::showNormal);
m_quit = new QAction("退出",this);
m_quit->setIcon(QIcon(":/icon/dataicon.png"));
connect(m_quit,&QAction::triggered,qApp,&QApplication::quit);
connect(m_tray,&QSystemTrayIcon::activated,this,&MainWindow::on_activatedSysTrayIcon);
m_menu->addAction(m_min);
m_menu->addAction(m_max);
m_menu->addAction(m_restor);
m_menu->addSeparator(); //分割
m_menu->addAction(m_quit);
m_tray->setContextMenu(m_menu);
m_tray->show();
connect(m_tray,&QSystemTrayIcon::messageClicked,this, [=]{
qDebug()<<"messageClicked===";
});
}
void MainWindow::closeEvent(QCloseEvent * event)
{
if(m_tray->isVisible())
{
this->hide();
m_tray->showMessage( tr("Qt"), tr("Qt托盘 消息提示"), QSystemTrayIcon::Information, 3*1000);
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;
}
}