[QNetworkReply] Problème avec sender
Bonjour,
je débute avec QT et je voulais faire un petit programme de téléchargement de page web pour commencer. Le programme est en mode console (linux).
Je me suis inspiré d'exemples que j'ai trouvé sur le net.
J'ai l'impression d'avoir des problèmes avec les libs QNetwork*.
La compilation me remonte les erreurs suivantes :
Code:
1 2 3
|
src/main.cpp:15:61: error: connect was not declared in this scope
src/main.cpp:21:60: error: sender was not declared in this scope |
J'avoue ne pas comprendre, les méthodes semblent exister dans la doc de QT. Problèmes de portées, de public/private ? Je ne suis pas encore très à l'aise avec ces notions.
Voici les sources :
main.cpp
Code:
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
|
#include "main.h"
#include <QtNetwork>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
void googleNews::telechargement()
{
const QUrl url = QUrl("http://www.google.fr"); //On récupére l'URL entrée par l'utilisateur.
const QNetworkRequest requete(url); //On crée notre requête
QNetworkAccessManager *m = new QNetworkAccessManager;
QNetworkReply *r = m->get(requete);
connect(r, SIGNAL(finished()), this, SLOT(enregistrer()));
connect(r, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(messageErreur(QNetworkReply::NetworkError)));
}
void googleNews::messageErreur(QNetworkReply::NetworkError)
{
QNetworkReply *r = qobject_cast<QNetworkReply*>(sender());
//QMessageBox::critical(this, "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>");
close();
}
void googleNews::enregistrer()
{
QNetworkReply *r = qobject_cast<QNetworkReply*>(sender()); //On récupére la réponse du serveur
QFile f("/tmp/fichier.txt"); //On ouvre le fichier
f.open(QIODevice::WriteOnly);
f.write(r->readAll()); ////On lit la réponse du serveur que l'on met dans un fichier
f.close(); //On ferme le fichier
r->deleteLater(); //IMPORTANT : on emploie la fonction deleteLater() pour supprimer la réponse du serveur.
//Si vous ne le faites pas, vous risquez des fuites de mémoire ou autre.
// QMessageBox::information(this, "Fin de téléchargement", "Téléchargement terminé !"); //On indique que tout s'est bien passé
close(); //On ferme le programme
}
int main(int argc, char* argv[])
{
googleNews gn;
gn.telechargement();
} |
Le main.h
Code:
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
|
#ifndef __MAIN_H__
#define __MAIN_H__
#include <QtNetwork>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
class googleNews
{
Q_OBJECT
public:
private slots:
void telechargement();
void enregistrer();
void messageErreur(QNetworkReply::NetworkError);
private:
};
#endif // __MAIN_H__ |
Si quelqu'un a une piste, je la prend.
Merci d'avance.