views:

712

answers:

1

I am attempting to use the QT QNetworkAccessManager class to manage some downloads in a multi-threaded C++/QT application.

On worker thread (edit: the thread is seperate for other reasons aside from doing the download), I'm would like to do a get to an external server and be ready to receive the results with the code:

...
m_nam = new QNetworkAccessManager(this);
QNetworkReply *reply = m_nam->get(request);
connect(m_nam, SIGNAL(finished(QNetworkReply *)), this, 
        SIGNAL(finished(QNetworkReply *)));
...

But I might decide, before the download is finished, that I'm not interested in the result.

So I'd like to set up a way to disconnect the connection from another thread by emitting a signal do_abort().

What suggests itself is:

connect(this, SIGNAL(do_abort()), reply, SLOT(abort()));

But I don't think that will work because abort is not slot of QNetworkReply.

So how can I set a mechanism where I can stop this download from another thread? I could subclass QNetworkReply and give that class the appropriate slot. But I'd like to understand the situation also.

+1  A: 

You do not need a worker thread for using QNetworkAccessManager. It is asynchronous, so it is OK to use it from your main thread.

In the QThread you implement a abortTheReply() slot and inside that you do m_reply->abort(). Then you connect your do_abort() signal to the abortTheReply().

guruz