构造函数
QSystemTrayIcon(QObject *parent = nullptr);
QSystemTrayIcon(const QIcon &icon, QObject *parent = nullptr);
enum ActivationReason {
Unknown, // 未知原因,可能表示没有明确的激活原因或者是一个未定义的状态
Context, // 通常表示右键单击托盘图标(上下文菜单请求)
DoubleClick, // 双击托盘图标
Trigger, // 通常与单击托盘图标相关,但具体行为可能依赖于操作系统和用户设置
MiddleClick // 中键单击托盘图标(通常是鼠标滚轮按下)
};
Q_SIGNALS:
void activated(QSystemTrayIcon::ActivationReason reason);
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QImage>
#include <QSystemTrayIcon>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QSystemTrayIcon *trayIcon;
void CreateRightMenu();//右键托盘弹出菜单
protected:
void closeEvent(QCloseEvent *e) override;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QPaintEvent>
#include <QSystemTrayIcon>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
trayIcon = new QSystemTrayIcon(QIcon(":/img/2.png"),this);
trayIcon->setToolTip("我的托盘");//设置提示
CreateRightMenu();//添加托盘菜单
trayIcon->show();//显示托盘
//void activated(QSystemTrayIcon::ActivationReason reason);
//点击托盘发出activated信号
// enum ActivationReason {
// Unknown,
// Context,
// DoubleClick,
// Trigger,
// MiddleClick
// };
connect(trayIcon,&QSystemTrayIcon::activated,[=](QSystemTrayIcon::ActivationReason reason){
switch (reason) {
case QSystemTrayIcon::DoubleClick://双击托盘图标
qDebug()<<"666";
break;
case QSystemTrayIcon::Trigger://单击托盘图标弹出程序窗口
this->setWindowState(Qt::WindowActive);//将窗口设置为活动状态
this->activateWindow();//它将窗口带到前台,并尝试使其获得焦点。
this->show();//显示窗口
break; }
});
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::CreateRightMenu()
{
QMenu *pmenu= new QMenu(this);
QAction *p1= new QAction("设置",this);
QAction *p2= new QAction("退出",this);
pmenu->addAction(p1);
pmenu->addAction(p2);
trayIcon->setContextMenu(pmenu);//默认右键菜单
}
void MainWindow::closeEvent(QCloseEvent *e)
{
if(trayIcon->isVisible()){//如果托盘可见/有效
this->hide();
e->ignore();//忽略程序的关闭
}
}