waiting for a signal

前端 未结 3 414
悲哀的现实
悲哀的现实 2020-12-06 11:26

I am working on an application which uploads the content of the file to server.

To upload the file to server I am using ‘QNetworkAccessManager’ class. Since it works

相关标签:
3条回答
  • 2020-12-06 11:52

    From what I can see from your code, you're executing a QEventLoop but you're not actually connecting its "quit" slot to any signal. Take the below as an example, login is a QHttp - and the code is taken from something different - but the principle applies.

    /* Create the QEventLoop */
    QEventLoop pause;
    /* connect the QHttp.requestFinished() Signal to the QEventLoop.quit() Slot */
    connect(&login, SIGNAL(requestFinished( int, bool )), &pause, SLOT(quit()));
    /* The code that will run during the QEventLoop */
    login.request(header,&logmein,&result);
    /* Execute the QEventLoop - it will quit when the above finished due to the connect() */
    pause.exec();
    

    This could be applied to your code, if I'm not mistaken, like this...

    /* connect the signal to the relevant slot */
    connect(&mNetworkManager, SIGNAL(finished( QNetworkReply )), &EventLoop, SLOT(quit()));
    /* Execute the code that will run during QEventLoop */
    responce = mNetworkManager.put(request, data);
    /* Execute the QEventLoop */
    EventLoop.exec();
    

    Apologies if I've mistaken your query! I'm only getting to grips with qt again after a break, but I believe this is what you mean! Good luck!

    0 讨论(0)
  • 2020-12-06 11:54

    Personally, I would recommend to not use any of these answers. It would be sufficient to connect a countdown latch to the signal.

    So you could write:

    Latch latch( 1 );
    QObject::connect( reply, SIGNAL(finished()),
                      &latch, SLOT(countDown()) );
    
    latch.wait();
    

    For this you would need a wrapper:

    class Latch : public QObject {
        Q_OBJECT
    public:
        Latch( uint count );
        void wait();
    public slots:
        void countDown();
    private:
        gcl::countdown_latch _latch;
    };
    
    0 讨论(0)
  • 2020-12-06 12:04

    I think you need to add something like that in your upload function:

    if (upf->openFile())
    {
        reply = manager->post(request, upf);
        connect(reply, SIGNAL(uploadProgress(qint64,qint64)), this, SIGNAL(progress(qint64,qint64)));
        connect(reply, SIGNAL(finished()), this, SLOT(replyFinished()));
        isInProgress = true;
        emit started();
    } else
    {
        emit finished(true, false, tr("Error: can't open file %1").arg(filename));
    }
    

    Here is the full text code: datacod-qt-tools

    Hope it help.

    0 讨论(0)
提交回复
热议问题