C++ 为什么Qt信号永远不会发出?
我试图从网页中获取数据,但信号C++ 为什么Qt信号永远不会发出?,c++,qt,C++,Qt,我试图从网页中获取数据,但信号finished()从未发出!!!我知道我一定是做错了什么,但我想不出是什么 # webservice.h class WebService:public QObject { Q_OBJECT public: explicit WebService(QObject *parent=0); void getRequest(const QString &urlString); signals: void networkErr
finished()
从未发出!!!我知道我一定是做错了什么,但我想不出是什么
# webservice.h
class WebService:public QObject
{
Q_OBJECT
public:
explicit WebService(QObject *parent=0);
void getRequest(const QString &urlString);
signals:
void networkError(QNetworkReply::NetworkError ne);
void finished(QNetworkReply*);
public slots:
void parseNetworkResponse(QNetworkReply* finished);
private:
QNetworkAccessManager *netMgr;
public:
QByteArray data;
};
#webservice.cpp
WebService::WebService(QObject *parent):QObject(parent)
{
netMgr = new QNetworkAccessManager;
connect(netMgr, SIGNAL(finished(QNetworkReply*)),
this, SLOT(parseNetworkResponse(QNetworkReply*)));
}
void WebService::getRequest(const QString &urlString)
{
QUrl url(urlString);
QNetworkRequest req;
emit finished(netMgr->get(req));
}
void WebService::parseNetworkResponse(QNetworkReply *finished)
{
if (finished->error() != QNetworkReply::NoError)
{
emit networkError(finished->error());
return;
}
data = finished->readAll();
qDebug() << data;
}
#webservice.h
类WebService:公共QObject
{
Q_对象
公众:
显式Web服务(QObject*parent=0);
void getRequest(const QString和urlString);
信号:
无效networkError(QNetworkReply::networkError ne);
作废完成(QNetworkReply*);
公众时段:
无效parseNetworkResponse(QNetworkReply*完成);
私人:
QNetworkAccessManager*netMgr;
公众:
QByteArray数据;
};
#webservice.cpp
WebService::WebService(QObject*parent):QObject(parent)
{
netMgr=新的QNetworkAccessManager;
连接(netMgr,信号(完成(QNetworkReply*)),
这个插槽(parseNetworkResponse(QNetworkReply*));
}
void WebService::getRequest(常量QString&urlString)
{
QUrl url(url字符串);
QNetworkRequest请求;
发射完成(netMgr->get(req));
}
void WebService::parseNetworkResponse(QNetworkReply*已完成)
{
如果(完成->错误()!=QNetworkReply::无错误)
{
发出networkError(完成->错误());
返回;
}
data=finished->readAll();
qDebug()您没有将url传递给您创建的QNetworkRequest
。请尝试:
QNetworkRequest req(url);
内部WebService::getRequest()
根据要求,对源代码进行了修改,以允许它作为控制台应用程序项目中的单个main.cpp
文件在QtCreator中编译和工作:
#include <QCoreApplication>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QByteArray>
#include <QString>
#include <QDebug>
//# webservice.h
class WebService:public QObject
{
Q_OBJECT
public:
explicit WebService(QObject *parent=0);
void getRequest(const QString &urlString);
signals:
void networkError(QNetworkReply::NetworkError ne);
void finished(QNetworkReply*);
public slots:
void parseNetworkResponse(QNetworkReply* finished);
private:
QNetworkAccessManager *netMgr;
public:
QByteArray data;
};
//#webservice.cpp
WebService::WebService(QObject *parent):QObject(parent)
{
netMgr = new QNetworkAccessManager;
connect(netMgr, SIGNAL(finished(QNetworkReply*)),
this, SLOT(parseNetworkResponse(QNetworkReply*)));
}
void WebService::getRequest(const QString &urlString)
{
QUrl url(urlString);
QNetworkRequest req(url);
emit finished(netMgr->get(req));
}
void WebService::parseNetworkResponse(QNetworkReply *finished)
{
if (finished->error() != QNetworkReply::NoError)
{
qDebug() << "QNetworkReply error: " << finished->error();
emit networkError(finished->error());
return;
}
data = finished->readAll();
qDebug() << data;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
WebService web;
web.getRequest("http://www.google.com");
return a.exec();
}
#include "main.moc"
您没有将url传递给您创建的QNetworkRequest
。请尝试:
QNetworkRequest req(url);
内部WebService::getRequest()
根据要求,对源代码进行了修改,以允许它作为控制台应用程序项目中的单个main.cpp
文件在QtCreator中编译和工作:
#include <QCoreApplication>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QByteArray>
#include <QString>
#include <QDebug>
//# webservice.h
class WebService:public QObject
{
Q_OBJECT
public:
explicit WebService(QObject *parent=0);
void getRequest(const QString &urlString);
signals:
void networkError(QNetworkReply::NetworkError ne);
void finished(QNetworkReply*);
public slots:
void parseNetworkResponse(QNetworkReply* finished);
private:
QNetworkAccessManager *netMgr;
public:
QByteArray data;
};
//#webservice.cpp
WebService::WebService(QObject *parent):QObject(parent)
{
netMgr = new QNetworkAccessManager;
connect(netMgr, SIGNAL(finished(QNetworkReply*)),
this, SLOT(parseNetworkResponse(QNetworkReply*)));
}
void WebService::getRequest(const QString &urlString)
{
QUrl url(urlString);
QNetworkRequest req(url);
emit finished(netMgr->get(req));
}
void WebService::parseNetworkResponse(QNetworkReply *finished)
{
if (finished->error() != QNetworkReply::NoError)
{
qDebug() << "QNetworkReply error: " << finished->error();
emit networkError(finished->error());
return;
}
data = finished->readAll();
qDebug() << data;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
WebService web;
web.getRequest("http://www.google.com");
return a.exec();
}
#include "main.moc"
如何使用WebService
?能否显示调用WebService
方法的代码?同时连接到error()信号以正确捕获错误您如何使用WebService
?能否显示调用WebService
方法的代码?同时连接到error()发出正确捕获错误的信号也许你可以解释更多关于主要问题是什么(或者发布一个完整的、可编译的示例)。如果我做了回答中提到的修改,我会从finished->readAll();
中得到响应。当然,假设urlString
是有效的(我使用了)http://www.google.com"
在我的测试中)。谢谢Michael,问题就在于此。我确实尝试使用“”同样。它也没有为QByteArray数据变量生成任何输出。上面的程序编译没有错误,我也没有让数据变量输出任何东西。我的url和你的url都是绝对有效的url。我不知道该说什么!!!除非找到解决方案。如果且仅当上面的代码不正确。两件事:1)带ut“http://”
url上的前缀请求导致出现QNetworkReply::ProtocolUnknownError
错误,2)您可能需要禁用计算机上的防火墙以允许请求工作。当我回家再次尝试此操作时,应用程序挂起请求,直到我禁用计算机上的防火墙软件。请发送me您编译的示例代码?因为我已经尝试了您所说和推荐的所有内容。顺便说一句:我没有防火墙。感谢Michael所做的一切。这是您的大拇指。也许您可以解释更多关于主要问题的内容(或发布一个完整的、可编译的示例)。如果我做了回答中提到的修改,我会从完成->readAll();
中得到一个响应。当然,假设urlString
有效(我使用了)http://www.google.com“
在我的测试中)。谢谢Michael,问题就在于此。我确实尝试过使用”同样。它也没有为QByteArray数据变量生成任何输出。上面的程序编译没有错误,我也没有让数据变量输出任何东西。我的url和你的url都是绝对有效的url。我不知道该说什么!!!除非找到解决方案。如果且仅当上面的代码不正确。两件事:1)带ut“http://”
url上的前缀请求导致出现QNetworkReply::ProtocolUnknownError
错误,2)您可能需要禁用计算机上的防火墙以允许请求工作。当我回家再次尝试此操作时,应用程序挂起请求,直到我禁用计算机上的防火墙软件。请发送m你编译的示例代码?因为我已经尝试了你所说的和推荐的所有内容。顺便说一句:我没有防火墙。谢谢迈克尔所做的一切。祝你大拇指。