Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Créer fichier texte à partir d'un fichier html



  • Bonjour,
    Je souhaiterais créer un fichier texte à partir d'un fichier html.
    Voici le code, mais il n'y a que quelques lignes obtenues. Merci de m'indiquer s'il y a des erreurs.
    Merci beaucoup de votre aide.

    le h:

    code_#ifndef CNETWORK_H
    #define CNETWORK_H
    
    #include <QWidget>
    #include <QObject>
    #include <QFile>
    #include <QMessageBox>
    #include <QtNetwork/QNetworkAccessManager>
    #include <QtNetwork/QNetworkRequest>
    #include <QNetworkReply>
    #include <QtNetwork>
    
    class QNetworkReply;
    class QNetworkAccessManager;
    class QString;
    
    namespace Ui {
    class CNetwork;
    }
    
    class CNetwork : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit CNetwork(QWidget *parent = 0);
        ~CNetwork();
    
            void Requette();
    
        public slots:
            void reponseRecue(QNetworkReply*);
    
    private:
        Ui::CNetwork *ui;
    
       QNetworkAccessManager *manager;
      };
    
    #endif // CNETWORK_H
    
    

    le cpp:

    #include "cnetwork.h"
    #include "ui_cnetwork.h"
    
    CNetwork::CNetwork(QWidget *parent) : manager(new QNetworkAccessManager(this)),
        QWidget(parent),
        ui(new Ui::CNetwork)
    {
        ui->setupUi(this);
        connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(reponseRecue(QNetworkReply*)));
    }
    
    CNetwork::~CNetwork()
    {
        delete ui;
    }
    
    void CNetwork::Requette()
    {
    qDebug() << "Nous sommes bien dans le void alerte::requete debut";
    
     manager->get(QNetworkRequest(QUrl("https://google.fr")));
    
    
        qDebug() << "Nous sommes bien dans le void alerte::requete fin";
    
    }
    
    void CNetwork::reponseRecue(QNetworkReply* reply)
    
    {
    
        if (reply->error() == QNetworkReply::NoError)
       {
          QString source = reply->readAll();
      qDebug() << source;
    
     QFile *donnees = new QFile("C:/DIVERS/test.txt");
      // Ouverture en ecriture seule
      donnees->open(QIODevice::WriteOnly);
      // Création du flux d'écriture
      QTextStream ecriture(donnees);
      // Insertion des lignes avec les sauts
      ecriture << source ;
       // Fermeture du fichier
      donnees->close();
           QMessageBox::information(0, tr("Connexion"), tr("Pas d'erreur !"));
    
                }
       else
       {
          QMessageBox::information(0, tr("Connexion"), tr("Erreur !"));
          qDebug() << reply->readAll();
       }
       delete reply;
    }
    

  • Lifetime Qt Champion

    Bonjour,

    Dans les choses à corriger:

    • Aucune vérification du succès de l'opération open
    • donnees n'est pas effacé donc il y a fuite de mémoire
    • Pour la destruction de reply, il vaut mieux utiliser la méthode deleteLater de l'objet.

    Pour ce second point, il est inutile d'allouer sur la mémoire de tas. Vue que c'est une variable à usage uniquement local, l'allouer sur la pile est suffisant.



  • Bonjour,
    Merci beaucoup de votre réponse. Je vais appliquer vos recommandations;
    En fait j'ai résolu mon problème avec l'ajout de code suivant:

    QString s = "https://google.fr";
    
    QUrl url;
    url.setUrl(s);
    
    QNetworkRequest req(url);
    
    req.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
    manager->get(req);
    

  • Banned

    This post is deleted!

Log in to reply