📒博客首页:何名取 的个人主页 - 文章 - 掘金 (juejin.cn)
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
❤️期待一起交流!
🙏作者水平很有限,如果发现错误,求告知,多谢!
🌺有问题可私信交流!!!
WinTaskbarProgress
前言
本节来实现任务栏进度条,主要用于下载文件或编译时对进度的可视化。
Qt Windows Extras模块介绍
Qt Windows Extras提供了一些类和函数,使开发者能够使用各种特定于Windows的函数。例如,可以将Qt对象转换为Windows对象控制柄,并操作DWM玻璃框架。
此外,开发者可以使用Windows 7引入的功能,如Aero Peek、跳转列表、任务栏按钮上的进度指示器或缩略图工具栏。
Qt Windows Extras模块在Qt6中被移除了,支持Qt Windows Extras模块的最高Qt版本是5.15版本。Qt文档中说明了Qt Windows Extras模块支持Win7,但是在Win10上任务栏进度条也可以使用。
实例
使用Qt Windows Extras模块需要在.pro工程文件中添加如下模块标识:
QT += winextras
之后可以正常使用QWinTaskbarProgress类和QWinTaskbarButton类进行实现,下面的代码用按钮点击来代替下载开始按钮模拟文件下载。
h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
#include <QWinTaskbarProgress>
#include <QWinTaskbarButton>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QTimer* timer;
QWinTaskbarButton* m_taskBar_button;
QWinTaskbarProgress* m_taskBar_progress;
};
#endif // MAINWINDOW_H
cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
timer = new QTimer;
timer->setInterval(1000);
m_taskBar_button = new QWinTaskbarButton(this);
// signals and slots
connect(timer, &QTimer::timeout, this, [=]()
{
m_taskBar_progress->setValue(m_taskBar_progress->value() + 10);
m_taskBar_progress->show();
if (m_taskBar_progress->value() >=100)
{
timer->stop();
m_taskBar_progress->setValue(0);
}
});
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
m_taskBar_button->setWindow(windowHandle());
m_taskBar_progress = m_taskBar_button->progress();
m_taskBar_progress->setRange(0, 100);
timer->start();
}
Qt6版本相较Qt5.15虽然版本更新了,但是移除了很多东西,Qt Windows Extras模块也是其中一个,因此使用Qt6反倒无法直接实现这个小功能了。
这个链接中是Qt6版本中移除模块的具体信息。Qt6中改变的Qt Extras模块