QThread で QNetworkAccessManager を使用する際に困っています。スレッドを使用しなくても、同じ機能が正常に機能します。現在使用しているスレッドは 1 つだけで、さらにいくつか追加する必要があります。
「Object::connect: No such slot QThread::replyFinished(QNetworkrReply*)」というエラー メッセージが表示されます。
ヘッダー ファイル コード (NewThread.h) は次のとおりです。
class NewThread: public QThread
{
public slots:
void replyFinished(QNetworkReply* reply);
protected:
void run();
private:
};
The source code file(NewThread.cpp ):
void NewThread::replyFinished(QNetworkReply *net_reply)
{
QByteArray data = net_reply->readAll();
QString str(data);
}
void NewThread::run()
{
QNetworkAccessManager *manager;
manager = new QNetworkAccessManager ();
QNetworkRequest req;
req.setUrl(QUrl("My url"));
QByteArray postData;
postData.append("some data string");
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
manager->setCookieJar(new QNetworkCookieJar(manager));
//Define the Request-url:
connect (manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinish (QNetworkReply *)));
//Send the request:
manager->post(req, postData);
}
void NewThread::replyFinish(QNetworkReply *reply)
{
QString answer = QString::fromUtf8(reply->readAll());
qDebug () << answer;
}
以下のように、別のクラスで NewThread クラスのオブジェクトを作成しています。
NewThread thread1;
thread1.start();
なぜ同じコードがスレッドではなくスレッドなしで機能するのか疑問に思っています。私は困難な状況にあり、助けていただければ幸いです。