2009-07-28 5 views
0

J'essaye de construire un module qui télécharge un fichier binaire dans Qt, en utilisant QNetworkAccessManager. J'utilise la même approche détaillée dans la documentation (voir ci-dessous), mais alors que j'obtiens des signaux readyRead, downloadProgress n'arrive jamais. Tout se passe sur le même thread (le projet est gros, donc je ne peux pas tout coller).downloadProgress non émis par QNetworkReply

Des idées?

QNetworkRequest request; 
request.setUrl("http://XXX.s3.amazonaws.com/XXX.exe"); 
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0"); 

QNetworkAccessManager * m_manager = new QNetworkAccessManager(this); 
m_reply = m_manager->get(request); 
m_reply->setParent(this); 

connect(m_reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead())); 
connect(m_reply, SIGNAL(downloadProgress(qint64 bytesReceived, qint64 bytesTotal)), 
this, SLOT(replyDownloadProgress(qint64 bytesReceived, qint64 bytesTotal))); 
+0

Est-ce que vous lisez des choses sur readyRead? Rien dans le code posté ne fait aucun téléchargement ... – Eugene

+0

oui en fait je lis, juste n'a pas le coller ici. exemple de navigateur utilisé à partir du code qt – Lior

Répondre

2

ok trouvé
wow ce une simple erreur.

la réponse est syntaxique:

connect(m_reply, SIGNAL(downloadProgress(qint64 bytesReceived, qint64 bytesTotal)), 
     this, SLOT(replyDownloadProgress(qint64 bytesReceived, qint64 bytesTotal))); 

est une erreur

il devrait être:

connect(m_reply, SIGNAL(downloadProgress(qint64 , qint64)), 
     this, SLOT(replyDownloadProgress(qint64 , qint64)); 

une fois je l'ai changé, je suis le signal.

QT NE VOIR LES ERREURS SYNTAX DANS SON PREPROCESSOR (note à moi-)

+0

Vous devriez avoir reçu une erreur sur stderr. – Kitsune

+0

Oui. Mais ces erreurs sont faciles à manquer (si vous produisez quoi que ce soit vous-même) – Eugene

+0

Kitsune: puis-je voir stderr sur Visual Studio? serait-ce dans la fenêtre de sortie? – Lior

1

J'ai patché mon Qt utiliser un qFatal() au lieu de qWarning(), de sorte que l'application affirme au lieu des messages d'erreur d'impression (qui ne peut être vu lors de la liaison avec une release-build Qt). YMMV.