Qt:QNetworkRequest accoumplish后如何发出QNetworkReply插槽?
我正在尝试使用多个线程从云请求数据。我的问题是在QnetworkReply完成replyFinished(QnetworkReply*)之后,插槽从未发出。我该怎么做 pc\u gateway.hQt:QNetworkRequest accoumplish后如何发出QNetworkReply插槽?,qt,visual-studio-2010,qt4.8,Qt,Visual Studio 2010,Qt4.8,我正在尝试使用多个线程从云请求数据。我的问题是在QnetworkReply完成replyFinished(QnetworkReply*)之后,插槽从未发出。我该怎么做 pc\u gateway.h //Main class #include "dhvac_datacollector_thread.h" class PC_Gateway : public QMainWindow { Q_OBJECT DHVAC_DataCollector_Thread *m_DHVAC_Da
//Main class
#include "dhvac_datacollector_thread.h"
class PC_Gateway : public QMainWindow
{
Q_OBJECT
DHVAC_DataCollector_Thread *m_DHVAC_DataCollector_Thread[70];
PC_Gateway(QWidget *parent = 0, Qt::WFlags flags = 0);
~PC_Gateway();
public slots:
void slot_start_comm();
};
//Thread class
class DHVAC_DataCollector_Thread : public QThread
{
Q_OBJECT
public:
DHVAC_DataCollector_Thread(QObject *parent);
~DHVAC_DataCollector_Thread();
void run();
void Stop();
public slots:
void replyFinished(QNetworkReply*);
};
pc\u网关.cpp
#include "pc_gateway.h"
PC_Gateway::PC_Gateway(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
}
PC_Gateway::~PC_Gateway()
{
}
void PC_Gateway::slot_start_comm()
{
int nNumOfThreads = 4;
for(int i=0; i<nNumOfThreads ; i++)
{
this->m_DHVAC_DataCollector_Thread[i] = new DHVAC_DataCollector_Thread(this);
this->m_DHVAC_DataCollector_Thread[i]->start();
}
}
#include "dhvac_datacollector_thread.h"
DHVAC_DataCollector_Thread::DHVAC_DataCollector_Thread(QObject *parent)
: QThread(parent)
{
}
DHVAC_DataCollector_Thread::~DHVAC_DataCollector_Thread()
{
}
void DHVAC_DataCollector_Thread::run()
{
while(true)
{
QString sUrl = "https://api.uno.taww.com/api/v2/data/sensor/"+sNodeId+"/10m/_";
QUrl url(sUrl);
bool bUrl = url.isValid();
if(!bUrl) //If URL is invalid
return false;
QNetworkRequest request;
request.setUrl(url);
request.setRawHeader("api_token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9");
request.setRawHeader("user_id","102473df5c9106e55d");
request.setRawHeader("cache-control","no-cache");
QNetworkAccessManager *manager = new QNetworkAccessManager();
connect(manager, SIGNAL(finished(QNetworkReply*)),this,
SLOT(replyFinished(QNetworkReply*)));
QNetworkReply *reply = manager->get(request);
}
}
void DHVAC_DataCollector_Thread::replyFinished(QNetworkReply *reply)
{
QByteArray responseData;
if(reply->error() == QNetworkReply::NoError)
{
responseData = reply->readAll();
QString sData (responseData);
reply->close();
reply->deleteLater();
qDebug()<<"Raw data:" <<sData;
}
}
DHVAC_DataCollector_Thread.cpp
#include "pc_gateway.h"
PC_Gateway::PC_Gateway(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
}
PC_Gateway::~PC_Gateway()
{
}
void PC_Gateway::slot_start_comm()
{
int nNumOfThreads = 4;
for(int i=0; i<nNumOfThreads ; i++)
{
this->m_DHVAC_DataCollector_Thread[i] = new DHVAC_DataCollector_Thread(this);
this->m_DHVAC_DataCollector_Thread[i]->start();
}
}
#include "dhvac_datacollector_thread.h"
DHVAC_DataCollector_Thread::DHVAC_DataCollector_Thread(QObject *parent)
: QThread(parent)
{
}
DHVAC_DataCollector_Thread::~DHVAC_DataCollector_Thread()
{
}
void DHVAC_DataCollector_Thread::run()
{
while(true)
{
QString sUrl = "https://api.uno.taww.com/api/v2/data/sensor/"+sNodeId+"/10m/_";
QUrl url(sUrl);
bool bUrl = url.isValid();
if(!bUrl) //If URL is invalid
return false;
QNetworkRequest request;
request.setUrl(url);
request.setRawHeader("api_token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9");
request.setRawHeader("user_id","102473df5c9106e55d");
request.setRawHeader("cache-control","no-cache");
QNetworkAccessManager *manager = new QNetworkAccessManager();
connect(manager, SIGNAL(finished(QNetworkReply*)),this,
SLOT(replyFinished(QNetworkReply*)));
QNetworkReply *reply = manager->get(request);
}
}
void DHVAC_DataCollector_Thread::replyFinished(QNetworkReply *reply)
{
QByteArray responseData;
if(reply->error() == QNetworkReply::NoError)
{
responseData = reply->readAll();
QString sData (responseData);
reply->close();
reply->deleteLater();
qDebug()<<"Raw data:" <<sData;
}
}
#包括“dhvac_datacollector_thread.h”
DHVAC_DataCollector_线程::DHVAC_DataCollector_线程(QObject*父)
:QThread(父线程)
{
}
DHVAC_DataCollector_线程::~DHVAC_DataCollector_线程()
{
}
void DHVAC_数据收集器_线程::run()
{
while(true)
{
QString sUrl=”https://api.uno.taww.com/api/v2/data/sensor/“+sNodeId+”/10m/3;”;
QUrl(sUrl);
bool-bUrl=url.isValid();
if(!bUrl)//如果URL无效
返回false;
QNetworkRequest请求;
setUrl(url);
请求.setRawHeader(“api_令牌”,“eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9”);
请求.setRawHeader(“用户id”,“102473df5c9106e55d”);
setRawHeader(“缓存控制”、“无缓存”);
QNetworkAccessManager*manager=新的QNetworkAccessManager();
连接(管理器,信号(完成(QNetworkReply*)),此,
插槽(replyFinished(QNetworkReply*));
QNetworkReply*reply=manager->get(请求);
}
}
void DHVAC_DataCollector_线程::replyFinished(QNetworkReply*reply)
{
QByteArray响应数据;
如果(回复->错误()==QNetworkReply::NoError)
{
responseData=reply->readAll();
QString sData(响应数据);
回复->关闭();
回复->删除稍后();
qDebug()您可以在收到回复后,在replyFinished
插槽中尝试发送请求,而不是在循环中。只需执行一个请求,如果replyFinished
工作正常,则执行第二个请求
void DHVAC_DataCollector_Thread::replyFinished(QNetworkReply *reply)
{
QByteArray responseData;
if(reply->error() == QNetworkReply::NoError)
{
responseData = reply->readAll();
QString sData (responseData);
reply->close();
reply->deleteLater();
qDebug()<<"Raw data:" <<sData;
}
// nextRequest()
}
void DHVAC_DataCollector_Thread::replyFinished(QNetworkReply*reply)
{
QByteArray响应数据;
如果(回复->错误()==QNetworkReply::NoError)
{
responseData=reply->readAll();
QString sData(响应数据);
回复->关闭();
回复->删除稍后();
qDebug()