Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT QNetworkAccessManager和信号_C++_Qt - Fatal编程技术网

C++ QT QNetworkAccessManager和信号

C++ QT QNetworkAccessManager和信号,c++,qt,C++,Qt,我有一个类(RequestHandler),我从主应用程序类调用它来调用各种web服务。一旦服务完成,该类将向调用类发送一个信号,表示它已经完成(可能是使用QString消息)。我的信号在测试方法中工作,但QNetworkAccessManager根本不工作。我对QT和C++很陌生。谢谢你的帮助 //RequestHandler.h #ifndef REQUESTHANDLER_H_ #define REQUESTHANDLER_H_ #include <QNetworkAccessMa

我有一个类(RequestHandler),我从主应用程序类调用它来调用各种web服务。一旦服务完成,该类将向调用类发送一个信号,表示它已经完成(可能是使用QString消息)。我的信号在测试方法中工作,但QNetworkAccessManager根本不工作。我对QT和C++很陌生。谢谢你的帮助

//RequestHandler.h

#ifndef REQUESTHANDLER_H_
#define REQUESTHANDLER_H_

#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QOBJECT>
#include "MainAppClass.hpp"

class RequestHandler : public QObject
{
    Q_OBJECT

public:
    explicit RequestHandler(QObject *parent = 0);
    void validateRegistration(QString reg);
    void onStatusUpdateCompleted();
    void sayHi();

signals:
    void sendSignal(QString txt);
private:
    QNetworkAccessManager* manager;
    QObject* thisObj;

public slots:
    void onRequestCompleted();
};

#endif /* REQUESTHANDLER_H_ */
我这样称呼这个班:

// test slots and reg
    RequestHandler rh(this);
//working
    rh.sayHi();
// not working
    rh.validateRegistration("test");

感谢您的帮助。

您通常应该通过连接到
error()
和使用
QNetworkAccessManager
finished()
发出信号,以便在发生错误时通知您

validateRegistration()
中构造
QNetworkAccessManager
对象确实是个坏主意,因为它会导致内存泄漏,并且您只需要一个这样的对象 友善的因此,请在
RequestHandler
的构造函数中执行此操作

void RequestHandler::validateRegistration(QString reg)
{
   QUrl url("the_registration_url");
   QNetworkRequest request(url);
   QNetworkReply *reply = manager->get(request);
   connect(reply, SIGNAL(finished()), SLOT(onRequestCompleted()));
   connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
           SLOT(onError(QNetworkReply::NetworkError)));
}

void RequestHandler::onRequestCompleted()
{
   qDebug() << "Request succeeded";
}

void RequestHandler::onError(QNetworkReply::NetworkError code)
{
   qError() << "Request failed with code " << code;
}
void RequestHandler::validateRegistration(QString reg)
{
QUrl url(“注册url”);
QNetworkRequest请求(url);
QNetworkReply*reply=manager->get(请求);
连接(应答,信号(finished()),插槽(onRequestCompleted());
连接(应答,信号(错误(QNetworkReply::NetworkError)),
插槽(onError(QNetworkReply::NetworkError));
}
void RequestHandler::onRequestCompleted()
{
qDebug()
void RequestHandler::validateRegistration(QString reg)
{
   QUrl url("the_registration_url");
   QNetworkRequest request(url);
   QNetworkReply *reply = manager->get(request);
   connect(reply, SIGNAL(finished()), SLOT(onRequestCompleted()));
   connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
           SLOT(onError(QNetworkReply::NetworkError)));
}

void RequestHandler::onRequestCompleted()
{
   qDebug() << "Request succeeded";
}

void RequestHandler::onError(QNetworkReply::NetworkError code)
{
   qError() << "Request failed with code " << code;
}