【问题标题】:QNetworkAccessManager does not emit signalQNetworkAccessManager 不发出信号
【发布时间】: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。

标签: c++ qt qnetworkaccessmanager


【解决方案1】:

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

  1. 为什么你使用回复指针而不是某种onRequestCompleted(QNetworkReply *reply)?
  2. 如果你这样做:

    QUrl url("http://...");
    QNetworkRequest request(url);
    connect(m_networkManager, &QNetworkAccessManager::finished, this, &IpResolver::onRequestCompleted);
    m_networkManager->get(request);
    
  3. 您的位置将是,例如:

    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);
猜你喜欢
  • 2011-02-16
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
相关资源
最近更新 更多