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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 
#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 : 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
 
#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.