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. How can i write any data on directory
Forum Updated to NodeBB v4.3 + New Features

How can i write any data on directory

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 4 Posters 3.5k Views 1 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.
  • mrjjM mrjj

    @Armin

    Connect connect from a signal to a slot(function)

    so here it says
    When the manager say "finished" then call replyFinished located in "this" object

    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));

    and the slot / function us
    void mainwindow::replyFinished(QNetworkReply *reply)

    So all it does is to set up the connect for a signal and which function we want it to call.

    so say we have 2 classes

    A and B
    A has beep signal and B have beepHandler
    then we say
    connect( pointer to a, beep , pointer to b, beephandler )
    so beep goes to beephandler

    For more info , please see
    http://doc.qt.io/qt-5/signalsandslots.html

    The version @Xiami is using just the same, but he uses the new syntax and
    uses a lambda which is a c++ things that allows you to define functions in place/right there.
    connect(reply,&QNetworkReply::finished,this,[&] { this is your slot }

    A Offline
    A Offline
    Armin
    wrote on last edited by
    #6

    @mrjj Thanks
    Why in this example you have pointed to class?

    mrjjM 1 Reply Last reply
    0
    • A Armin

      @mrjj Thanks
      Why in this example you have pointed to class?

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

      @Armin
      because connects wants the address of a real objects.
      like in
      ClassX * inst= new ClassX;
      inst is the right kind for connect.
      Its a instance of the type/class ClassX;

      Its not for all ClassX created, but only
      for those you connect.

      1 Reply Last reply
      3
      • mrjjM mrjj

        Hi
        1 - it will send a signal when something is read (replyFinished) or error happened.
        void getDoc::on_pushButton_2_clicked()
        {
        manager = new QNetworkAccessManager(this);
        connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
        manager->get(QNetworkRequest(QUrl("http://www.google.com")));
        }

        void getDoc::replyFinished(QNetworkReply *reply)
        {
        // qDebug() << reply->error();
        QByteArray data=reply->readAll();
        }

        2-
        use QFile and qdatastream to save it to a file.

        A Offline
        A Offline
        Armin
        wrote on last edited by
        #8

        @mrjj I feel, your code is hard and twisted , so can you make it simpler for me?

        VRoninV 1 Reply Last reply
        0
        • A Armin

          @mrjj I feel, your code is hard and twisted , so can you make it simpler for me?

          VRoninV Offline
          VRoninV Offline
          VRonin
          wrote on last edited by VRonin
          #9

          @Armin said in How can i write any data on directory:

          your code is hard and twisted

          No it's not, I wouldn't know how to make it easier. You should probably take a look at http://doc.qt.io/qt-5/signalsandslots.html


          @Xiami

          • no need to use the "controversial" sender() here, just pass reply by value in the capturing group of the lambda
          • do not use C-cast to downcast, it's unsafe, use dynamic_cast or, if it's a QObject as it's always the case when calling sender(), qobject_cast
          • if the downloaded file is too big you might run out of memory if you wait for finished do the processing as soon as there is data available using readyRead
          QFile* file=new QFile("DownloadResult.dat"); //the file to save the data into
          if(file->open(QIODevice::WriteOnly)){ //if you can open the file for writing
              QNetworkAccessManager *netaccessmanager = new QNetworkAccessManager; //create the manager
              QNetworkReply* reply = netaccessmanager.get(QNetworkRequest(QUrl(ui->textEdit->toPlainText()))); // send the request
              connect(reply,&QNetworkReply::readyRead,this,[reply,file]()->void{ //when there is data available
                  file->write(reply->readAll()); //save it to file
              });
              connect(reply,&QNetworkReply::finished,reply,&QNetworkReply::deleteLater); //when finished clear the memory
              connect(netaccessmanager,&QNetworkAccessManager::finished,reply,&QNetworkAccessManager::deleteLater); //when finished clear the memory
              connect(reply,&QNetworkReply::finished,file,&QFile::deleteLater);//when finished close the file and clear the memory
          }
          

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          1 Reply Last reply
          4
          • mrjjM mrjj

            Hi
            1 - it will send a signal when something is read (replyFinished) or error happened.
            void getDoc::on_pushButton_2_clicked()
            {
            manager = new QNetworkAccessManager(this);
            connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
            manager->get(QNetworkRequest(QUrl("http://www.google.com")));
            }

            void getDoc::replyFinished(QNetworkReply *reply)
            {
            // qDebug() << reply->error();
            QByteArray data=reply->readAll();
            }

            2-
            use QFile and qdatastream to save it to a file.

            A Offline
            A Offline
            Armin
            wrote on last edited by
            #10

            @mrjj said in How can i write any data on directory:

            connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
            manager->get(QNetworkRequest(QUrl("http://www.google.com")));

            why connect is on 5 line ?
            shouldn't be on 4 line?

            mrjjM 1 Reply Last reply
            0
            • A Armin

              @mrjj said in How can i write any data on directory:

              connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
              manager->get(QNetworkRequest(QUrl("http://www.google.com")));

              why connect is on 5 line ?
              shouldn't be on 4 line?

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

              @Armin
              Hi
              well its just important to connect it up before starting to use it.
              So best spot is usual when you create it.

              1 Reply Last reply
              2
              • mrjjM mrjj

                Hi
                1 - it will send a signal when something is read (replyFinished) or error happened.
                void getDoc::on_pushButton_2_clicked()
                {
                manager = new QNetworkAccessManager(this);
                connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
                manager->get(QNetworkRequest(QUrl("http://www.google.com")));
                }

                void getDoc::replyFinished(QNetworkReply *reply)
                {
                // qDebug() << reply->error();
                QByteArray data=reply->readAll();
                }

                2-
                use QFile and qdatastream to save it to a file.

                A Offline
                A Offline
                Armin
                wrote on last edited by
                #12

                @mrjj
                Can i use code in below?

                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()));
                
                mrjjM 1 Reply Last reply
                0
                • A Armin

                  @mrjj
                  Can i use code in below?

                  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()));
                  
                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #13

                  @Armin
                  Yes looks fine :)

                  1 Reply Last reply
                  2
                  • mrjjM mrjj

                    Hi
                    1 - it will send a signal when something is read (replyFinished) or error happened.
                    void getDoc::on_pushButton_2_clicked()
                    {
                    manager = new QNetworkAccessManager(this);
                    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
                    manager->get(QNetworkRequest(QUrl("http://www.google.com")));
                    }

                    void getDoc::replyFinished(QNetworkReply *reply)
                    {
                    // qDebug() << reply->error();
                    QByteArray data=reply->readAll();
                    }

                    2-
                    use QFile and qdatastream to save it to a file.

                    A Offline
                    A Offline
                    Armin
                    wrote on last edited by
                    #14

                    @mrjj said in How can i write any data on directory:

                    1 - it will send a signal when something is read (replyFinished) or error happened.

                    I get this message :
                    QObject::connect: No such signal QNetworkAccessManager::finished(*QNetworkReply) in ..\DownloadManager\mainwindow.cpp:20
                    QObject::connect: (receiver name: 'MainWindow')

                    why?

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

                      show the actual real code
                      it says QNetworkAccessManager dont have finished signal but syntax looks wrong

                      QNetworkAccessManager::finished(*QNetworkReply) <<< the * seems very wrong

                      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