IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

ProgressBar de téléchargement


Sujet :

Qt

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 3
    Points
    3
    Par défaut ProgressBar de téléchargement
    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();
    }

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonsoir,

    Je t'invite à regarder cette QR de la FAQ Qt :
    http://qt.developpez.com/faq/?page=Q...cessmanager-pc
    A priori, tu devrais y trouver toutes tes réponses.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    C'est ce que j'ai fait au début, mais bytesTotal reste toujours à -1 jusqu'a la fin du téléchargement ou il devient le nombre total d'octets téléchargés ...

  4. #4
    Membre actif Avatar de cayou66
    Inscrit en
    Décembre 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 286
    Points : 273
    Points
    273
    Par défaut
    Salut,
    un thread peut être? Si il est en attente de recevoir le fichier avant de continuer et donc de te dire combien il reste à télécharger ça va pas fonctionner correctement
    Si dans un autre thread tu regarde quelle taille il reste, ça devrait mieux fonctionner.

Discussions similaires

  1. [Débutant] Progressbar sur un téléchargement
    Par fisher01 dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/12/2011, 17h10
  2. Réponses: 7
    Dernier message: 01/04/2011, 12h22
  3. Progressbar durant le téléchargement
    Par cstan dans le forum C++Builder
    Réponses: 7
    Dernier message: 19/05/2006, 09h55
  4. [C#] Utilisation d'une ProgressBar pour un téléchargement
    Par snoof dans le forum Windows Forms
    Réponses: 10
    Dernier message: 04/10/2004, 19h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo