I need to be able make a request GET request, which requires the use of signals to process the replies, and return the reply back in a a processed form. I’ve structured the code as described in Threading Wihtout the Headache, but when I run the reply is never received or processed.
// Set-up request
QNetworkAccessManager* pConnection(new QNetworkAccessManager());
connect(pConnection,
SIGNAL(finished(QNetworkReply*)),
this,
SLOT(process(QNetworkReply*)));
QUrl url;
url.setUrl(HOST);
url.addQueryItem("P1", "Hi");
url.addQueryItem("P2", "Bob");
// Send request
QNetworkRequest request(url);
pConnection->get(request);
// Wait for reply
QThread* pResponce(new QThread(this));
connect(this,
SIGNAL(processingFinished()),
pResponce,
SLOT(quit()));
pConnection->moveToThread(pResponce);
pResponce->start();
pResponce->wait();
pConnection->deleteLater();
pResponce->deleteLater();
return this->processedReply;
Obviously I’m missing something, but what? It works when I’m not using the threads (and the deletes), so it’s not the URL or server.
Only the main/gui thread receives signals if you don’t set up an event loop in the other threads.
Source: http://doc.qt.digia.com/4.6/threads-qobject.html
See
QThread::exec(). That’s why in the example you’re linking the QThreadEx class is introduced, and used (not in your code snipplet, though!)…