Bonjour à tous, je voudrais télécharger un fichier en ligne et y mettre une barre de chargement, malheureusement pour cela j'ai besoin de connaître la taille du fichier à télécharger. J'ai essayé avec bytesTotal, il reste a -1 jusqu'a la fin du téléchargement, tandis que readBufferSize() reste à 0.

Voilà le code sans plus tarder :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
#include <QApplication>
#include <QString>
#include <QtNetwork>
#include <QtGui>
#include <QDebug>
#include "FenMaj.h"
#include "ui_FenMaj.h"
 
FenMaj::FenMaj(QWidget *parent) : QWidget(parent)
{
    setupUi(this);
}
 
void FenMaj::on_boutonMaj_clicked()
{
	const QUrl URL= QUrl ("http://machin.com/truc.txt");
    const QNetworkRequest requette(URL);
    QNetworkAccessManager *m = new QNetworkAccessManager;
	QNetworkReply *r = m->get(requette);
	bytesTotalLus = r->readBufferSize();
	qDebug() << "bytesTotalLus : " << bytesTotalLus;
    connect(r, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(messageErreur(QNetworkReply::NetworkError)));
    connect(r, SIGNAL(finished()), this, SLOT(enregistrer()));
    connect(r, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(progressionDownload(qint64, qint64) ));
	boutonMaj->setEnabled(false);
}
 
void FenMaj::progressionDownload(qint64 bytesReceived, qint64 bytesTotal)
{
	//QNetworkReply *r = qobject_cast<QNetworkReply*>(sender());
	progress->setRange(0, bytesTotalLus);
	//qDebug() << "recu : " << bytesReceived << " ; total : " << bytesTotal;
	progress->setValue(bytesReceived);
 
	if(bytesTotal != -1)
	{
		progress->setRange(0, bytesTotal);
	}
}
 
void FenMaj::messageErreur(QNetworkReply::NetworkError code)
{
	QCoreApplication::processEvents();
    Q_UNUSED(code);
    QNetworkReply *r = qobject_cast<QNetworkReply*>(sender());
    QMessageBox *dialog = new QMessageBox(QMessageBox::Critical, "Erreur", "Erreur lors du chargement. Vérifiez votre connexion internet ou réessayez plus tard <br /><br /> Code de l'erreur : <br /><em>" + r->errorString() + "</em>");
    dialog->show();
    r->close();
    close();
}
 
void FenMaj::enregistrer()
{
    QNetworkReply *r = static_cast<QNetworkReply*>(sender());
    QFile f("fortunes.txt");
    f.open(QIODevice::WriteOnly);
    QString UTF8Text = QString::fromUtf8(r->readAll());
    f.write(UTF8Text.toLatin1());
    f.close();
    r->deleteLater();
	QMessageBox::information(this, "Fin de téléchargement", "Téléchargement terminé !");
	close();
}