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设置都不起作

QNetworkAccessManager 问题

QNetworkAccessManager 的文件上传错误

我的Android进阶之旅------>Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法

QT 使用 QNetworkAccessManager 下载文件