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
Forum Updated to NodeBB v4.3 + New Features

Storing data from QnetworkReply

Scheduled Pinned Locked Moved Solved General and Desktop
45 Posts 8 Posters 15.3k Views 4 Watching
  • 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.
  • L LeeH

    @ambershark

    Hi

    @ambershark said in Storing data from QnetworkReply:

    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;
    }

    Your right about returning _ba. I should have seen that as the function is not void... (my brains been fried working on real project lol), and I agree the compiler should have warned me about that. But that being said unfortunately has not resolved the problem. The output is still ""

    However in the same function If I deliberately overwrite _ba, I get output:

    QByteArray data::get(){
        _ba = "testing...";
        qDebug() << _ba;
        return _ba;
    }
    

    output: "testing..."

    if I remove my call to data::get() in main() and output server data directly from the slot I get my data:

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

    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.

    Yep that was the reason for my post

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

    @LeeH
    You did read why it dont work ?
    obj.download();
    obj.get();
    Cannot work as download() is not a blocking call
    so you will call obj.get(); BEFORE any data ever is read.

    First when you get signal, its safe to use obj.get(); Not before.

    1 Reply Last reply
    3
    • L LeeH

      @ambershark

      Hi

      @ambershark said in Storing data from QnetworkReply:

      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;
      }

      Your right about returning _ba. I should have seen that as the function is not void... (my brains been fried working on real project lol), and I agree the compiler should have warned me about that. But that being said unfortunately has not resolved the problem. The output is still ""

      However in the same function If I deliberately overwrite _ba, I get output:

      QByteArray data::get(){
          _ba = "testing...";
          qDebug() << _ba;
          return _ba;
      }
      

      output: "testing..."

      if I remove my call to data::get() in main() and output server data directly from the slot I get my data:

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

      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.

      Yep that was the reason for my post

      J.HilkJ Offline
      J.HilkJ Offline
      J.Hilk
      Moderators
      wrote on last edited by
      #42

      @LeeH according to what @mrjj said:

      QObject::connect(_rep, SIGNAL(readyRead()), this, SLOT(output()));
      QObject::connect(_rep, SIGNAL(finished()), this, SLOT(get()));
      

      should do the trick.

      get() will be called as soon as all data is written into the Bytearray.


      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


      Q: What's that?
      A: It's blue light.
      Q: What does it do?
      A: It turns blue.

      1 Reply Last reply
      2
      • jsulmJ jsulm

        @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>)));
        
        L Offline
        L Offline
        LeeH
        wrote on last edited by LeeH
        #43

        Hi
        I had already modified my code in earlier post. You suggested QIODevice doc for readyRead() but I didn't realise QNetworkReply also had a readRead signal.

        @jsulm said in Storing data from QnetworkReply:

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

        1 Reply Last reply
        0
        • L Offline
          L Offline
          LeeH
          wrote on last edited by LeeH
          #44

          Hi guys

          Ah at last it now works! When I did what @mrjj said:

          Cannot work as download() is not a blocking call
          so you will call obj.get(); BEFORE any data ever is read.

          and then what @J.Hilk said after making data::get() a slot:

          QObject::connect(_rep, SIGNAL(readyRead()), this, SLOT(output()));
          QObject::connect(_rep, SIGNAL(finished()), this, SLOT(get()));
          

          Success... Thanks so much to EVERYONE that helped!

          Lee

          1 Reply Last reply
          3
          • mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #45

            Super.
            Good work not giving up.

            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