要实现任务栏图标闪烁功能,可以使用 QSystemTrayIcon 类和 QTimer 类。

首先,在 Qt 的主窗口类中,创建一个 QSystemTrayIcon 对象:

QSystemTrayIcon *trayIcon = new QSystemTrayIcon(this);

然后,设置任务栏图标的图标:

trayIcon->setIcon(QIcon(':/images/icon.png'));

接着,定义一个 QTimer 对象,用于定时闪烁任务栏图标:

QTimer *timer = new QTimer(this);

设置定时器的时间间隔:

timer->setInterval(500); // 闪烁间隔为 500ms

然后,定义一个成员变量用于记录任务栏图标是否正在闪烁:

bool isBlinking = false;

接下来,定义一个槽函数,用于实现任务栏图标的闪烁:

void blinkTrayIcon()
{
    if (isBlinking) {
        trayIcon->setVisible(!trayIcon->isVisible());
    } else {
        trayIcon->setVisible(true);
    }
}

最后,在需要闪烁任务栏图标的地方,启动定时器并设置任务栏图标为可见状态:

isBlinking = true;
timer->start();
trayIcon->setVisible(true);

在定时器的 timeout() 信号中调用闪烁槽函数:

connect(timer, &QTimer::timeout, this, &MainWindow::blinkTrayIcon);

当任务完成后,停止定时器并设置任务栏图标为可见状态:

isBlinking = false;
timer->stop();
trayIcon->setVisible(true);

完整的代码如下:

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSystemTrayIcon>
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void blinkTrayIcon();

private:
    Ui::MainWindow *ui;
    QSystemTrayIcon *trayIcon;
    QTimer *timer;
    bool isBlinking;
};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setIcon(QIcon(':/images/icon.png'));
    timer = new QTimer(this);
    timer->setInterval(500);
    isBlinking = false;

    connect(timer, &QTimer::timeout, this, &MainWindow::blinkTrayIcon);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::blinkTrayIcon()
{
    if (isBlinking) {
        trayIcon->setVisible(!trayIcon->isVisible());
    } else {
        trayIcon->setVisible(true);
    }
}

void MainWindow::on_pushButton_clicked()
{
    isBlinking = true;
    timer->start();
    trayIcon->setVisible(true);
}

void MainWindow::on_pushButton_2_clicked()
{
    isBlinking = false;
    timer->stop();
    trayIcon->setVisible(true);
}

在 MainWindow.ui 中添加两个 QPushButton 控件,分别命名为 pushButton 和 pushButton_2。

最后,编译运行程序,点击 pushButton 按钮,任务栏图标开始闪烁,点击 pushButton_2 按钮,任务栏图标停止闪烁。

C++ QT 实现任务栏图标闪烁功能 - 详细教程

原文地址: https://www.cveoy.top/t/topic/ojny 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录