Подключите qnetworkaccessmanager к слоту

Теперь у меня есть этот код:

requester.h

#ifndef REQUESTER_H
#define REQUESTER_H

#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QtCore/QtCore>
#include <QVector>
#include <QObject>

class Requester
{
Q_OBJECT
public:
Requester();
~Requester();
QString get_last_reply();
void send_request();
private:
QNetworkAccessManager *manager;
QVector<QString> replies;
public slots:
void get_reply(QNetworkReply *reply);
};

#endif // REQUESTER_H

requester.cpp

#include "requester.h"
Requester::Requester()
{
manager = new QNetworkAccessManager;
}

Requester::~Requester() {
delete manager;
}void Requester::get_reply(QNetworkReply *reply) {
QByteArray res = reply->readAll();
QString data = res.data();
replies.push_back(data);
}

QString Requester::get_last_reply() {
QString res =  replies.back();
replies.pop_back();
return res;
}
void Requester::send_request() {
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), this,     SLOT(get_reply(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://google.com")));
}

И эта ошибка:

no matching function for call to 'QObject::connect(QNetworkReply*&, const char*, Requester* const, const char*)'

В чем дело? Я пытался использовать просто соединение вместо QObject :: connect, но произошла ошибка из-за невозможности преобразования QNetworkAccessmanager в сокет.

2

Решение

Проблема в том, что вы не наследуете QObject, поэтому, естественно, вы не можете обработать слоты в этом классе.

Вы должны написать что-то вроде этого:

requester.h

class Requester : public QObject
{
Q_OBJECT
public:
explicit Requester(QObject *parent);
...

requester.cpp

#include "requester.h"
Requester::Requester(QObject *p)
: QObject(p)
, manager(new QNetworkAccessManager)
{
}
...

Кроме того, в этом случае практически нет смысла строить QNetworkAccessManager в куче, а не в стеке. Вы можете просто иметь QNetworkAccessManager m_networkAccessManager; член без выделения, построения и удаления, но это всего лишь дополнительная информация на будущее.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]