发布时间:2023-08-22 14:00
任务栏进度条是Windows7就引入的一种UI形式,通常用于显示软件当前正在执行的任务的进度(如编译程序的进度、下载任务的进度)。如下:
本文主要介绍利用QWinTaskbarButton和QWinTaskbarProgress类实现任务栏进度条的显示。
新建一个Qt案例,项目名称为“TaskbarTest”,基类选择“QWidget”,点击选中创建UI界面复选框,完成项目创建。
pro文件中需要增加一个库:
QT += winextras
Qt框架针对Windows提供了一个单独的模块WinExtras。这个模块中提供了一些类库和函数,用于实现Windows上特有的功能,如类型转换、句柄操作、窗口属性设置等。当然也包括了此次我们要说的任务栏进度条,QWinTaskbarButton和QWinTaskbarProgress类。
声明计时器、任务栏按钮和进度指示器:
public:
QTimer *timer;
QWinTaskbarButton *windowsTaskbarButton;
QWinTaskbarProgress *windowsTaskbarProgress;
声明定时器槽函数和按钮点击槽函数:
private slots:
void onTimeout();
void onButtonClicked();
在构造函数中编写代码如下:
timer = new QTimer;
timer->setInterval(10);//设置时间间隔为100ms
timer->setSingleShot(false);//设置不是单次触发器
windowsTaskbarButton = new QWinTaskbarButton(this); //创建显示进度的任务栏按钮
connect(timer, &QTimer::timeout, this, &Widget::onTimeout);//连接定时器信号和对应的槽函数
connect(ui->pbn_start, &QPushButton::clicked, this, &Widget::onButtonClicked);//连接按钮点击信号和对应的槽函数
定义计时器对应的槽函数:
void Widget::onTimeout() {
qDebug()<<windowsTaskbarProgress->value()+1;
windowsTaskbarProgress->setValue(windowsTaskbarProgress->value() + 1);//设置TaskbarProgress的当前值
windowsTaskbarProgress->show(); //显示TaskbarProgress
//当达到最大值时则计时器停止且重置进度指示器
if(windowsTaskbarProgress->value()==100)
{
timer->stop();//计时器停止
windowsTaskbarProgress->reset();//重置进度指示器
}
}
定义按钮点击槽函数:
void Widget::onButtonClicked() {
windowsTaskbarButton->setWindow(windowHandle()); //将任务栏按钮与进度条关联,假设进度条是它自己的窗口
windowsTaskbarProgress = windowsTaskbarButton->progress();//设置进度指示器
windowsTaskbarProgress->setRange(0, 100); //设置最小值和最大值的值
timer->start(); //定时器启动
}
【注意】: 这里有个坑,windowHandle()调用要在窗口显示出来之后才能返回正确的窗口句柄,否则返回的null,导致任务栏进度条无法正常显示。
如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/84404358
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~
参考链接:https://forum.qt.io/topic/70672/windowhandle-will-return-null