效果展示(如果对您有帮助记得点赞哦)
上图中的风车为自定义设置的gif图标。
1. 添加资源文件(略…)
如有需要自行搜索…
2. 添加相关头文件
#include <QSystemTrayIcon>
#include <QCloseEvent>
#include <QMenu>
#include <QTimer>
#include <QMovie>
3.创建相关对象及函数(.h文件)
private:
QSystemTrayIcon *trayIcon;
QAction *restoreAction;
QAction *quitAction;
QMovie *gifMovie;
private slots:
void updateTrayIconFromGif();
void closeEvent(QCloseEvent *event);
void slotPopMenu(const QPoint &pos);
4. 据体实现
/* 系统托盘 */
void MainWindow::backstage(void)
{
// 创建动作
restoreAction = new QAction("显示", this);
connect(restoreAction, &QAction::triggered, this, &MainWindow::show);
quitAction = new QAction("退出", this);
connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
// 创建托盘菜单
QMenu *trayMenu = new QMenu(this);
trayMenu->addAction(restoreAction);
trayMenu->addAction(quitAction);
gifMovie = new QMovie(":/icon4.gif", QByteArray(), this);
gifMovie->setCacheMode(QMovie::CacheAll); // 可选,但有时可以提高性能
connect(gifMovie, &QMovie::frameChanged, this, &MainWindow::updateTrayIconFromGif);
connect(gifMovie, &QMovie::finished, gifMovie, &QMovie::start); //循环播放
gifMovie->start();
trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayMenu);
trayIcon->show();
}
/* 关闭启动托盘 */
void MainWindow::closeEvent(QCloseEvent *event)
{
if(trayIcon->isVisible())
{
hide();
event->ignore();
}
}
/* 更新gif */
void MainWindow::updateTrayIconFromGif(/*int frame*/)
{
if(!trayIcon || !gifMovie)
return;
QImage image = gifMovie->currentImage();
QPixmap pixmap = QPixmap::fromImage(image);
trayIcon->setIcon(QIcon(pixmap));
}
以上为动态gif图标设置方法
静态图标可以直接设置
定义QSystemTrayIcon和QAction对象作为类的私有成员:
private:
QSystemTrayIcon *trayIcon;
QAction *restoreAction;
QAction *quitAction;
在构造函数或初始化函数中,初始化这些对象:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// ... 其他初始化代码 ...
// 创建动作
restoreAction = new QAction("显示", this);
connect(restoreAction, &QAction::triggered, this, &MainWindow::show);
quitAction = new QAction("退出", this);
connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
// 创建托盘菜单
QMenu *trayMenu = new QMenu(this);
trayMenu->addAction(restoreAction);
trayMenu->addAction(quitAction);
// 初始化托盘图标
trayIcon = new QSystemTrayIcon(this);
//trayIcon->setIcon(this->windowIcon()); // 使用窗口图标作为托盘图标 可以更改为自己的图标路径
trayIcon->setIcon(QIcon(":/path/to/your/icon.png")); //自定义图标设置
trayIcon->setContextMenu(trayMenu);
trayIcon->show(); // 显示托盘图标
}
结束…
本次无源码