【发布时间】:2014-11-09 15:54:14
【问题描述】:
实现了下载多个文件,但是不知道怎么实现下载的总进度条,很常见。
我的代码:
QNetworkAccessManager manager;
QList<QNetworkReply *> currentDownloads;
void MainWindow::checkUpdate()
{
QStringList files;
files << "http://cavexp.net/uploads/game/Theugry/zips/resourcepacks.zip"
<< "http://cavexp.net/uploads/game/Theugry/zips/resourcepacks.zip";
doDownload(files);
}
void MainWindow::doDownload(const QVariant& v)
{
if (v.type() == QVariant::StringList) {
foreach (QString url, v.toStringList()) {
QNetworkReply* reply = manager.get(QNetworkRequest(QUrl(url)));
connect(&manager, SIGNAL(downloadProgress(qint64, qint64)),
this, SLOT(updateDownloadProgress(qint64, qint64)));
currentDownloads.append(reply);
}
}
}
void MainWindow::downloadFinished(QNetworkReply *reply)
{
currentDownloads.removeAll(reply);
reply->deleteLater();
}
void MainWindow::updateDownloadProgress(qint64 bytesRead, qint64 totalBytes)
{
ui->progressBar->setMaximum(totalBytes);
ui->progressBar->setValue(bytesRead);
}
我将不胜感激任何帮助和提示!谢谢。
【问题讨论】:
-
manager 没有信号
downloadProgress不是吗,也许你的意思只是replyconnect(reply, SIGNAL(downloadProgress(qint64, qint64)),this, SLOT(updateDownloadProgress(qint64, qint64)));? -
@Chernobyl 我不知道如何实现它。你能展示一个工作的例子吗?我将不胜感激!
-
@Chernobyl по-русски грамотнее объясню。 Реализовано скачивание файлов, хочу вывести общий прогресс их скачивания。
-
@John перевожу на русский то, что сказал Chernobyl: у класса QNetworkAccessManager (смотрим здеся: qt-project.org/doc/qt-5/qnetworkaccessmanager.html) нет сигнала, который бы сообы Сначала нужно у этого менеджера попросить QNetworkReply с помошью функции get(), а у того уже такой сигнал есть。 Смотрим пример тута - qt-project.org/doc/qt-4.8/… (ищем строку currentDownload = manager.get(request); )
-
@mvidelgauz спасибо, но в этом примере показывается именно прогресс для 1 файла。 Как реализовать общий прогресс бар скачивания нескольких файлов? Заранее спасибо!