在QT里,结合使用ITaskbarList3的SetOverlayIcon方法,可以实现消息提醒功能。
效果如下:
Window API
https://learn.microsoft.com/zh-cn/windows/win32/api/shobjidl_...
代码如下:
green.ico是一个16*16大小的icon
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class ITaskbarList3;
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget* parent = nullptr);
~MainWindow();
void updateOverlayIcon();
private:
ITaskbarList3* taskbarList;
bool m_has = false;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include <ShObjIdl.h>
#include <atlbase.h>
#include <QDebug>
#include <QTimer>
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) {
CoInitialize(NULL);
CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList3, (void**)&taskbarList);
QTimer* timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &MainWindow::updateOverlayIcon);
timer->start(1000); // 每5秒更新一次
resize(800,600);
}
MainWindow::~MainWindow() {
if (taskbarList) {
taskbarList->Release();
}
CoUninitialize();
}
void MainWindow::updateOverlayIcon() {
if (!m_has) {
QImage image(":/green.ico");
HICON hIcon = image.toHICON();
if (!hIcon) {
qDebug() << "HICON load error";
}
HRESULT hr = taskbarList->SetOverlayIcon((HWND)this->winId(), hIcon, L"New messages");
if (FAILED(hr)) {
qDebug() << "SetOverlayIcon failed with error code:" << hr;
}
m_has = true;
} else {
taskbarList->SetOverlayIcon((HWND)this->winId(), NULL, L"New messages");
m_has = false;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。