QNetworkAccessManager 不发出信号

Posted

技术标签:

【中文标题】QNetworkAccessManager 不发出信号【英文标题】:QNetworkAccessManager does not emit signal 【发布时间】:2016-05-17 19:53:55 【问题描述】:

所以我有这个代码:

QUrl url("http://...");
QNetworkRequest request(url);
QNetworkReply *reply = m_networkManager->get(request);
connect(reply, SIGNAL(finished()), SLOT(onRequestCompleted()));
connect(reply,SIGNAL(error(QNetworkReply::NetworkError)),SLOT(onError(QNetworkReply::NetworkError)));

我无法获得其他功能的信号

void IpResolver::onRequestCompleted()

QString webContent;

QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());

if (reply)

    if (reply->error() == QNetworkReply::NoError)
    
        QString webContent = reply->readAll();
    


我不知道解决办法,请帮忙。

【问题讨论】:

您的主题“QNetworkAccessManager 不起作用”是错误的。我已经多次使用该课程,虽然它确实存在一些问题,但说“它不起作用”是公然错误的。说“我不知道如何正确使用它”会更接近事实。 好的,我要重命名它 "Can't get signal to the other function" 你的意思是你的槽永远不会被调用? 是的,从不调用插槽 onRequestCompleted。 【参考方案1】:

我不知道你到底想要什么,但是:

    为什么你使用回复指针而不是某种onRequestCompleted(QNetworkReply *reply)

    如果你这样做:

    QUrl url("http://...");
    QNetworkRequest request(url);
    connect(m_networkManager, &QNetworkAccessManager::finished, this, &IpResolver::onRequestCompleted);
    m_networkManager->get(request);
    

    您的位置将是,例如:

    void IpResolver::onRequestCompleted(QNetworkReply *reply)
    
        QString webContent;
        if (reply->error() == QNetworkReply::NoError)
            webContent = reply->readAll();
    
    

【讨论】:

起初,非常感谢您的帮助,但我尝试了您的版本,现在编译时抛出异常:抛出异常:读取访问冲突。这-> 是 0x555C3A43。如果有这个异常的处理程序,程序可以安全地继续。 您究竟在哪里发现了异常?什么调试模式告诉你? 执行m_networkManager-&gt;get(request); 时是否会抛出异常?如果你评论这一切都好吗?是First-chance exception at: The binding handle is invalid.吗? 好的,你能找到代码中哪一行抛出这个异常吗? 在代码中它的这一行:connect(m_networkManager, &QNetworkAccessManager::finished, this, &IpResolver::onRequestCompleted);

以上是关于QNetworkAccessManager 不发出信号的主要内容,如果未能解决你的问题,请参考以下文章

Qt QNetworkAccessManager 发出完成信号的长时间延迟

在发布模式下编译时不会发出 QNetworkAccessManager 完成信号(VS 2005)

QNetworkAccessManager 不会启动

QFtp或QNetworkaccessmanager因系统代理请求报错解决方案

QFtp或QNetworkaccessmanager因系统代理请求报错解决方案

QFtp或QNetworkaccessmanager因系统代理请求报错解决方案