Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Storing data from QnetworkReply

Storing data from QnetworkReply

Scheduled Pinned Locked Moved Solved General and Desktop
45 Posts 8 Posters 13.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • mrjjM mrjj

    @LeeH said in Storing data from QnetworkReply:
    Hi
    If you keep the instance of class Downloader around,
    there is no reason you cannot keep the data for later.
    Say if you append to a QByteArray variable defined as
    class member in Downloader

    Can you please show the actual code how you use your helper class and how you later
    try to access the data?

    L Offline
    L Offline
    LeeH
    wrote on last edited by
    #19

    @mrjj said in Storing data from QnetworkReply:

    Can you please show the actual code how you use your helper class and how you later
    try to access the data?

    Certainly.

    header:

    class data : public QObject{
    
        Q_OBJECT
    
    public:
        data();
        void download();
        QByteArray get();
    
    public slots:
    
        void output(QNetworkReply* rep);
    
    private:
        QNetworkAccessManager* _qnam;
        QByteArray _ba;
    
    };
    

    source:

    data::data(){}
    
    void data::download(){
    
        _qnam = new QNetworkAccessManager(this);
        _qnam->get(QNetworkRequest(QUrl("http://www.google.com")));
        QObject::connect(_qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(output(QNetworkReply*)));
    }
    
    void data::output(QNetworkReply* rep){
    
            if(!rep->error()){
    
               _ba.append(rep->readAll());
    
            }
            rep->deleteLater();
        }
    
    QByteArray data::get(){
        qDebug() << _ba;
    }
    

    main:

     data obj;
     obj.download();
     obj.get();
    
    jsulmJ 1 Reply Last reply
    0
    • L LeeH

      @mrjj said in Storing data from QnetworkReply:

      Can you please show the actual code how you use your helper class and how you later
      try to access the data?

      Certainly.

      header:

      class data : public QObject{
      
          Q_OBJECT
      
      public:
          data();
          void download();
          QByteArray get();
      
      public slots:
      
          void output(QNetworkReply* rep);
      
      private:
          QNetworkAccessManager* _qnam;
          QByteArray _ba;
      
      };
      

      source:

      data::data(){}
      
      void data::download(){
      
          _qnam = new QNetworkAccessManager(this);
          _qnam->get(QNetworkRequest(QUrl("http://www.google.com")));
          QObject::connect(_qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(output(QNetworkReply*)));
      }
      
      void data::output(QNetworkReply* rep){
      
              if(!rep->error()){
      
                 _ba.append(rep->readAll());
      
              }
              rep->deleteLater();
          }
      
      QByteArray data::get(){
          qDebug() << _ba;
      }
      

      main:

       data obj;
       obj.download();
       obj.get();
      
      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #20

      @LeeH said in Storing data from QnetworkReply:

      QNetworkReply

      You should connect your output() slot to http://doc.qt.io/qt-5/qiodevice.html#readyRead signal.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      L 1 Reply Last reply
      2
      • jsulmJ jsulm

        @LeeH said in Storing data from QnetworkReply:

        QNetworkReply

        You should connect your output() slot to http://doc.qt.io/qt-5/qiodevice.html#readyRead signal.

        L Offline
        L Offline
        LeeH
        wrote on last edited by LeeH
        #21

        @jsulm said in Storing data from QnetworkReply:

        You should connect your output() slot to http://doc.qt.io/qt-5/qiodevice.html#readyRead signal.

        Hi

        Do you mean another connection, something like this:

        void data::download(){
        
           _qnam->get(QNetworkRequest(QUrl("http://www.google.com")));
           QObject::connect(_qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(output(QNetworkReply*)));
           QObject::connect(QIODevice, SIGNAL(readyRead()), this, SLOT(output(QNetworkReply*)));
        
        }
        

        I know the QIODevice usage here is wrong, but just trying to get an idea

        thanks

        jsulmJ 1 Reply Last reply
        0
        • L LeeH

          @jsulm said in Storing data from QnetworkReply:

          You should connect your output() slot to http://doc.qt.io/qt-5/qiodevice.html#readyRead signal.

          Hi

          Do you mean another connection, something like this:

          void data::download(){
          
             _qnam->get(QNetworkRequest(QUrl("http://www.google.com")));
             QObject::connect(_qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(output(QNetworkReply*)));
             QObject::connect(QIODevice, SIGNAL(readyRead()), this, SLOT(output(QNetworkReply*)));
          
          }
          

          I know the QIODevice usage here is wrong, but just trying to get an idea

          thanks

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #22

          @LeeH No need for two connections, the one for readyRead() is enough

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          L 1 Reply Last reply
          1
          • jsulmJ jsulm

            @LeeH No need for two connections, the one for readyRead() is enough

            L Offline
            L Offline
            LeeH
            wrote on last edited by
            #23

            @jsulm

            Ok... so how should I use QIOdevice here:

            QObject::connect(QIODevice, SIGNAL(readyRead()), this, SLOT(output(QNetworkReply*)));
            

            i get error: "expecting primary expression before ',' token" and it can't be instantiated

            thanks

            m.sueM jsulmJ 2 Replies Last reply
            0
            • L LeeH

              @jsulm

              Ok... so how should I use QIOdevice here:

              QObject::connect(QIODevice, SIGNAL(readyRead()), this, SLOT(output(QNetworkReply*)));
              

              i get error: "expecting primary expression before ',' token" and it can't be instantiated

              thanks

              m.sueM Offline
              m.sueM Offline
              m.sue
              wrote on last edited by
              #24

              Hi @LeeH

              You need the QIODevice type object not the class name there.

              -Michael.

              L 1 Reply Last reply
              0
              • m.sueM m.sue

                Hi @LeeH

                You need the QIODevice type object not the class name there.

                -Michael.

                L Offline
                L Offline
                LeeH
                wrote on last edited by
                #25

                @m.sue

                Hi,

                QIODevice is an abstract class.

                m.sueM 1 Reply Last reply
                0
                • L LeeH

                  @m.sue

                  Hi,

                  QIODevice is an abstract class.

                  m.sueM Offline
                  m.sueM Offline
                  m.sue
                  wrote on last edited by
                  #26

                  Hi @LeeH

                  then the object of the derived class that you use.

                  -Michael.

                  L 1 Reply Last reply
                  0
                  • m.sueM m.sue

                    Hi @LeeH

                    then the object of the derived class that you use.

                    -Michael.

                    L Offline
                    L Offline
                    LeeH
                    wrote on last edited by
                    #27

                    @m.sue said in Storing data from QnetworkReply:

                    then the object of the derived class that you use.

                    I modified my code to use readRead() from QNetworkReply object and it still doesn't work:

                    ...
                    void data::download(){
                    
                    _rep = _qnam->get(QNetworkRequest(QUrl("http://www.google.com")));
                    QObject::connect(_rep, SIGNAL(readyRead()), this, SLOT(output()));
                    
                    }
                    
                    void data::output(){
                    
                        if(!_rep->error()){
                    
                           _ba.append(_rep->readAll());
                    
                        }
                        else{
                            qDebug() << _rep->error();
                        }
                        _rep->deleteLater();
                    }
                    
                    m.sueM 1 Reply Last reply
                    0
                    • L LeeH

                      @m.sue said in Storing data from QnetworkReply:

                      then the object of the derived class that you use.

                      I modified my code to use readRead() from QNetworkReply object and it still doesn't work:

                      ...
                      void data::download(){
                      
                      _rep = _qnam->get(QNetworkRequest(QUrl("http://www.google.com")));
                      QObject::connect(_rep, SIGNAL(readyRead()), this, SLOT(output()));
                      
                      }
                      
                      void data::output(){
                      
                          if(!_rep->error()){
                      
                             _ba.append(_rep->readAll());
                      
                          }
                          else{
                              qDebug() << _rep->error();
                          }
                          _rep->deleteLater();
                      }
                      
                      m.sueM Offline
                      m.sueM Offline
                      m.sue
                      wrote on last edited by
                      #28

                      Hi @LeeH

                      I would write: connect(_rep, SIGNAL(readyRead()), SLOT(output())); But this should not be essential.

                      So maybe output() is not a slot.

                      -Michael.

                      L 1 Reply Last reply
                      0
                      • mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by
                        #29

                        @LeeH said in Storing data from QnetworkReply:

                        qDebug() << _rep->error();

                        Is line ever activated ?
                        is _ba.append called ?

                        L 1 Reply Last reply
                        0
                        • m.sueM m.sue

                          Hi @LeeH

                          I would write: connect(_rep, SIGNAL(readyRead()), SLOT(output())); But this should not be essential.

                          So maybe output() is not a slot.

                          -Michael.

                          L Offline
                          L Offline
                          LeeH
                          wrote on last edited by
                          #30

                          @m.sue said in Storing data from QnetworkReply:

                          So maybe output() is not a slot.

                          Hi it's always been a public slot... and i do get server reply data

                          1 Reply Last reply
                          0
                          • mrjjM mrjj

                            @LeeH said in Storing data from QnetworkReply:

                            qDebug() << _rep->error();

                            Is line ever activated ?
                            is _ba.append called ?

                            L Offline
                            L Offline
                            LeeH
                            wrote on last edited by
                            #31

                            @mrjj said in Storing data from QnetworkReply:

                            Is line ever activated ?
                            is _ba.append called ?

                            Hi, there are no errors from server, and I always get reply.
                            I call _ba from main() using data::get()

                            mrjjM 1 Reply Last reply
                            0
                            • L LeeH

                              @mrjj said in Storing data from QnetworkReply:

                              Is line ever activated ?
                              is _ba.append called ?

                              Hi, there are no errors from server, and I always get reply.
                              I call _ba from main() using data::get()

                              mrjjM Offline
                              mrjjM Offline
                              mrjj
                              Lifetime Qt Champion
                              wrote on last edited by
                              #32

                              @LeeH
                              but is data appended?

                              if(!_rep->error()){
                              _ba.append(_rep->readAll());
                              qDebug() <<"size" << _ba.size();
                              }

                              have you tried with a breakpoint ?
                              is data::output() called?

                              L 1 Reply Last reply
                              0
                              • mrjjM mrjj

                                @LeeH
                                but is data appended?

                                if(!_rep->error()){
                                _ba.append(_rep->readAll());
                                qDebug() <<"size" << _ba.size();
                                }

                                have you tried with a breakpoint ?
                                is data::output() called?

                                L Offline
                                L Offline
                                LeeH
                                wrote on last edited by
                                #33

                                @mrjj

                                When I added:

                                qDebug() <<"size" << _ba.size();

                                i got:

                                size 2634
                                

                                Yes data::output() is definately being called

                                mrjjM 1 Reply Last reply
                                0
                                • L LeeH

                                  @mrjj

                                  When I added:

                                  qDebug() <<"size" << _ba.size();

                                  i got:

                                  size 2634
                                  

                                  Yes data::output() is definately being called

                                  mrjjM Offline
                                  mrjjM Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #34

                                  @LeeH
                                  So what is not working ?
                                  You clearly read data into _ba.

                                  L 1 Reply Last reply
                                  0
                                  • mrjjM mrjj

                                    @LeeH
                                    So what is not working ?
                                    You clearly read data into _ba.

                                    L Offline
                                    L Offline
                                    LeeH
                                    wrote on last edited by
                                    #35

                                    @mrjj

                                    but my data::get() I use to read _ba that i call from main() after downloading, is empty(""), where as if I read _ba from the slot inside the class I can see all my data

                                    L 1 Reply Last reply
                                    0
                                    • L LeeH

                                      @mrjj

                                      but my data::get() I use to read _ba that i call from main() after downloading, is empty(""), where as if I read _ba from the slot inside the class I can see all my data

                                      L Offline
                                      L Offline
                                      LeeH
                                      wrote on last edited by
                                      #36

                                      @LeeH

                                      You know I think It's best I just stick to saving to file, that seem's to be the only way I can be sure my data sticks around and can be used anywhere.... I thank everyone for their help, and apologize for wasting all of our time!

                                      A 1 Reply Last reply
                                      0
                                      • L LeeH

                                        @LeeH

                                        You know I think It's best I just stick to saving to file, that seem's to be the only way I can be sure my data sticks around and can be used anywhere.... I thank everyone for their help, and apologize for wasting all of our time!

                                        A Offline
                                        A Offline
                                        ambershark
                                        wrote on last edited by ambershark
                                        #37

                                        @LeeH Well here's your problem:

                                        QByteArray data::get(){
                                            qDebug() << _ba;
                                        }
                                        

                                        You don't return anything. You should have gotten at least a compiler warning from that.

                                        Anyway, just edit to be:

                                        QByteArray data::get(){
                                            qDebug() << _ba;
                                            return _ba;
                                        }
                                        

                                        And your data.get() will work.

                                        There is no reason to save the data to a file. You're just wasting resources on disk and slowing your app down for no reason.

                                        My L-GPL'd C++ Logger github.com/ambershark-mike/sharklog

                                        L 1 Reply Last reply
                                        2
                                        • L LeeH

                                          @jsulm

                                          Ok... so how should I use QIOdevice here:

                                          QObject::connect(QIODevice, SIGNAL(readyRead()), this, SLOT(output(QNetworkReply*)));
                                          

                                          i get error: "expecting primary expression before ',' token" and it can't be instantiated

                                          thanks

                                          jsulmJ Offline
                                          jsulmJ Offline
                                          jsulm
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #38

                                          @LeeH said in Storing data from QnetworkReply:

                                          Ok... so how should I use QIOdevice here

                                          You use your QNetworkReply which is derived from QIODevice. And you cannot connect a class - you only can connect instances.
                                          Did you read the documentation? http://doc.qt.io/qt-5/qnetworkaccessmanager.html
                                          From there:

                                          QNetworkRequest request;
                                          request.setUrl(QUrl("http://qt-project.org"));
                                          request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
                                          
                                          QNetworkReply *reply = manager->get(request);
                                          connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead())); // THIS ONE
                                          connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
                                                  this, SLOT(slotError(QNetworkReply::NetworkError)));
                                          connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
                                                  this, SLOT(slotSslErrors(QList<QSslError>)));
                                          

                                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                                          L 1 Reply Last reply
                                          1

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved