一、正文
任务栏进度条是Windows7就引入的一种UI形式,通常用于显示软件当前正在执行的任务的进度(如编译程序的进度、下载任务的进度)。如下:
在Qt中使用任务栏进度条也是非常容易的一件事情。Qt框架针对Windows提供了一个单独的模块WinExtras。这个模块中提供了一些类库和函数,用于实现Windows上特有的功能,如类型转换、句柄操作、窗口属性设置等。当然也包括了此次我们要说的任务栏进度条。那么就直接来看代码吧:
#include "TaskbarProgress.h" #include <QAbstractButton> #include <QTimer> TaskbarProgress::TaskbarProgress(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); timer = new QTimer; timer->setInterval(1000); timer->setSingleShot(false); windowsTaskbarButton = new QWinTaskbarButton(this); //Create the taskbar button which will show the progress connect(timer, &QTimer::timeout, this, &TaskbarProgress::onTimeout); connect(ui.startButton, &QAbstractButton::clicked, this, &TaskbarProgress::onButtonClicked); } void TaskbarProgress::onButtonClicked() { windowsTaskbarButton->setWindow(windowHandle()); //Associate the taskbar button to the progress bar, assuming that the progress bar is its own window windowsTaskbarProgress = windowsTaskbarButton->progress(); windowsTaskbarProgress->setRange(0, 100); timer->start(); } void TaskbarProgress::onTimeout() { windowsTaskbarProgress->setValue(windowsTaskbarProgress->value() + 1); windowsTaskbarProgress->show(); }
代码逻辑简单,点击开始按钮之后开始设置任务栏进度条。注意到这里有个坑,windowHandle()调用要在窗口显示出来之后才能返回正确的窗口句柄,否则返回的null,导致任务栏进度条无法正常显示。
二、参考链接
1. https://forum.qt.io/topic/70672/windowhandle-will-return-null