QNetworkAccessManager 类显示下载进度
时间: 2023-08-04 09:04:14 浏览: 178
下载进度显示
要显示 Qt 中 QNetworkAccessManager 类的下载进度,您可以使用 QNetworkReply 的 `downloadProgress(qint64 bytesReceived, qint64 bytesTotal)` 信号。该信号在下载过程中发出,可以提供已接收的字节数和总字节数。
以下是一个示例代码,演示如何显示下载进度:
```cpp
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QNetworkAccessManager manager;
QNetworkRequest request(QUrl("https://example.com/file.txt"));
QNetworkReply *reply = manager.get(request);
QFile file("file.txt");
if (!file.open(QIODevice::WriteOnly))
{
qDebug() << "Failed to open file for writing.";
reply->deleteLater();
return -1;
}
QObject::connect(reply, &QNetworkReply::downloadProgress, [&](qint64 bytesReceived, qint64 bytesTotal){
qDebug() << "Downloaded" << bytesReceived << "out of" << bytesTotal << "bytes";
});
QObject::connect(reply, &QNetworkReply::finished, [&](){
file.close();
qDebug() << "File downloaded successfully.";
reply->deleteLater();
a.exit(0);
});
QObject::connect(reply, &QNetworkReply::readyRead, [&](){
file.write(reply->readAll());
});
return a.exec();
}
```
上述代码中,我们将 `downloadProgress` 信号连接到一个 lambda 函数,该函数在每次接收到数据时打印下载进度。在 `readyRead` 信号中,我们将接收到的数据写入文件中。在 `finished` 信号中,我们关闭文件并输出下载成功的消息。
请注意,由于 `downloadProgress` 信号是在下载过程中发出的,所以您可能会看到多个进度更新。您可以根据需要自定义如何显示和处理下载进度。
阅读全文