简述
我们下载东西的时候都会想知道自己下载多少了,还有多久可以下完,但是我们也不可能一直盯着程序中的进度条看,还要去做别的事。这时候任务栏进度条就有用了,我们可以在做别的事时只需要看任务栏进度条就能够知道下载的进度了,很多软件都有这样的功能,比如谷歌浏览器、迅雷。
Qt也可以实现这样的功能,使用QT自带的QWinTaskBarButton和QWinTaskBarProgress就可以实现这样的功能。
效果展示
代码实现
要使用QWinTaskBarButton和QWinTaskBarProgress需要先早pro文件中加入:
win32:QT += winextras
taskbarprogress.h文件
#ifndef TASKBARPROGRESS_H
#define TASKBARPROGRESS_H
#include <QMainWindow>
#include <QTimer>
#include <QAbstractButton>
#include <QWinTaskbarProgress>
#include <QWinTaskbarButton>
namespace Ui {
class TaskbarProgress;
}
class TaskbarProgress : public QMainWindow
{
Q_OBJECT
public:
explicit TaskbarProgress(QWidget *parent = 0);
~TaskbarProgress();
void onButtonClicked();
void onTimeout();
private:
Ui::TaskbarProgress *ui;
QTimer *timer;
QWinTaskbarButton *windowsTaskbarButton;
QWinTaskbarProgress *windowsTaskbarProgress;
};
#endif // TASKBARPROGRESS_H
taskbarprogress.cpp文件
#include "taskbarprogress.h"
#include "ui_taskbarprogress.h"
TaskbarProgress::TaskbarProgress(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::TaskbarProgress)
{
ui->setupUi(this);
timer = new QTimer;
timer->setInterval(1000); //设置时间间隔
//创建显示进度的任务栏按钮
windowsTaskbarButton = new QWinTaskbarButton(this);
connect(timer, &QTimer::timeout, this, &TaskbarProgress::onTimeout);
connect(ui->Btn_Start, &QAbstractButton::clicked, this, &TaskbarProgress::onButtonClicked);
}
TaskbarProgress::~TaskbarProgress()
{
delete ui;
}
void TaskbarProgress::onButtonClicked() {
//将任务栏按钮关联到进度栏,假设进度栏是它自己的窗口
windowsTaskbarButton->setWindow(windowHandle());
windowsTaskbarProgress = windowsTaskbarButton->progress();
windowsTaskbarProgress->setRange(0, 100);
timer->start();
}
void TaskbarProgress::onTimeout() {
//当进度条的值发生变化时,更改任务栏中的进度值
windowsTaskbarProgress->setValue(windowsTaskbarProgress->value() + 20);
windowsTaskbarProgress->show();
if (windowsTaskbarProgress->value() > 99) {
windowsTaskbarProgress->setValue(0);
timer->stop();
}
}