Qt在任务栏图标和系统托盘图标上显示红点

在任务栏图标上显示红点

关键类:QWinTaskbarButton

cpp 复制代码
#include <QWinTaskbarButton>

QPointer<QWinTaskbarButton> taskbarBtn = nullptr;
if (!taskbarBtn) {
    taskbarBtn = new QWinTaskbarButton(window);
    taskbarBtn->setWindow(window->windowHandle());
}

if (checked) {
    QPixmap pixmap(10, 10);
    pixmap.fill(Qt::transparent);

    QPainter painter(&pixmap);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setPen(Qt::NoPen); // 不绘制边框
    painter.setBrush(Qt::red);
    painter.drawEllipse(2, 2, 8, 8);

    QIcon icon(pixmap);

    taskbarBtn->setOverlayIcon(icon);
}
else {
    taskbarBtn->clearOverlayIcon();
}

UI可以参考OBS录制开启。checked为true显示红点,false不显示红点。

使用QWinTaskbarButton::setOverlayIcon设置覆盖图标

在系统托盘上显示红点

关键类:QSystemTrayIcon

cpp 复制代码
    if (visible) {
        QPixmap pixmap;
        if (!pixmap.load(":/res/logo.png")) {
            qDebug() << "Failed to load icon from resource file.";
            return;
        }
        pixmap = pixmap.scaled(16, 16);
        QPainter painter(&pixmap);
        painter.setRenderHint(QPainter::Antialiasing);
        painter.setPen(Qt::NoPen); // 不绘制边框
        painter.setBrush(Qt::red);
        painter.drawEllipse(0, 8, 8, 8);
        QIcon icon(pixmap);
        setIcon(icon);
    }
    else {
        setIcon(QIcon(":/res/logo.png"));
    }

先将logo加载到QPixmap,再在QPixmap上用QPainter绘制红点。最后调用QSystemTrayIcon::setIcon

相关推荐
牵牛老人23 分钟前
CAN通讯实战:Qt基于周立功 USBCAN 的 CAN 总线通信开发全攻略
网络·qt·系统架构
_君莫笑1 小时前
Qt+Qml前后端分离上位机软件技术方案
c++·qt·用户界面·qml
想取一个与众不同的名字好难2 小时前
QT webSocket接收客户端发送的双目摄像头数据并显示
开发语言·qt·websocket
基德爆肝c语言2 小时前
Qt控件:按钮类
开发语言·qt
基德爆肝c语言5 小时前
Qt:显示类控件
开发语言·qt·命令模式
小许同学记录成长6 小时前
基于 QxOrm 的 Qt 持久化层技术指南
开发语言·数据库·qt
辞旧 lekkk14 小时前
【Qt】信号和槽
linux·开发语言·数据库·qt·学习·mysql·萌新
liuhuizuikeai17 小时前
可视化门禁---Linux/Qt+SqLite篇
linux·运维·qt
螺丝钉的扭矩一瞬间产生高能蛋白21 小时前
QT的C++接口基础用法
c++·qt·嵌入式软件·嵌入式linux·linux应用
张人玉1 天前
PyCharm配置PyQt5安装报错详情笔记
笔记·qt·pycharm·pyqt5