QNetworkAccessManager 不起作用
Posted
技术标签:
【中文标题】QNetworkAccessManager 不起作用【英文标题】:QNetworkAccessManager doesn't work 【发布时间】:2016-05-11 11:09:53 【问题描述】:我有以下代码:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
m_networkAccessManager(new QNetworkAccessManager(this))
ui->setupUi(this);
connect(m_networkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyForGeoCoordinates(QNetworkReply*)));
getCoordinates();
void MainWindow::getCoordinates()
std::string query = "http://maps.google.com/maps/api/geocode/json?address=warsaw&sensor=false&language=en";
QNetworkRequest request(QUrl(QString::fromStdString(query)));
m_reply = m_networkAccessManager->get(request);
connect(m_reply, SIGNAL(finished()), this, SLOT(rep()));
connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotError(QNetworkReply::NetworkError)));
connect(m_reply, SIGNAL(readyRead()), this, SLOT(rep()));
我想向谷歌服务器发送查询并获得响应,但是当我发送请求时,上述插槽都没有调用,那我做错了什么?如果我把那个地址放在我的浏览器中,我会得到一些数据。
【问题讨论】:
【参考方案1】:嗯,我认为你在连接上的错误。它们必须在您调用get()
函数之前声明。
【讨论】:
我不这么认为,因为 connect 仅适用于真实对象。在您的解决方案中,我有 connect(null, SIGNAL(.....),因此会导致错误 等等。您如何认为回复可以在不采取任何行动的情况下向您发出任何信息?你只是从get()
得到它,但你什么都不做来接收信号。
m_networkAccessManager->get() 向服务器发送请求,get() 返回 QNetworkReply obj,当网络回复完成时,它会发出与 m_networkAccessManager 相同的信号
好的。请参阅文档:void QNetworkAccessManager::finished(QNetworkReply * reply)
只要待处理的网络回复完成,就会发出此信号。回复参数将包含一个指向刚刚完成的回复的指针。该信号与 QNetworkReply::finished() 信号一起发出。
假设 rep() 和 slotError() 插槽被正确声明并且连接工作(如果没有,控制台上应该有警告,至少在调试模式下),bladzio 的代码看起来完全正确对我来说,这是连接到 QNetworkReply 对象的常用方法。 (get 返回对象,一个连接到它,信号保证在事件循环稍后发出)以上是关于QNetworkAccessManager 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Qt QNetworkAccessManager 和插槽不起作用
使用dwr后,javaweb设置的session超时失效,web.xml和tomcat设置都不起作
我的Android进阶之旅------>Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法