QNetworkReply::error 信号何时会跟随finished() 信号?

Posted

技术标签:

【中文标题】QNetworkReply::error 信号何时会跟随finished() 信号?【英文标题】:When will QNetworkReply::error signal followed by a finished() signal? 【发布时间】:2016-05-25 15:04:48 【问题描述】:

对于信号:

QNetworkReply::error(QNetworkReply::NetworkError code)

Qt的文档说:

当回复检测到处理错误时发出此信号。 完成()信号可能会跟随,表明 连接结束。

具体来说,finished() 信号什么时候发出,什么时候不发出?

【问题讨论】:

This 可能会回答您的问题。 【参考方案1】:

QNetworkReply::error 信号何时会跟随finished() 信号? 具体来说,finished() 信号什么时候发出,什么时候发出 不是吗?

信号finished()在由于数据传输完成或传输过程中的错误而完成请求时发出。信号error() 发生在finished() 之前,以防出现错误。在实践中,我们可以同时处理“错误”和“传输成功”的finished()

举例说明:

// connect 'finished' signal with consumer
connect(&s_networkAccessManager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(requestFinished(QNetworkReply*)));



void MyClass::requestFinished(QNetworkReply* pReply)

    if ( pReply )
    
         if (pReply->error() == QNetworkReply::NoError)
             consumeData(pReply)
         else
             errorHandler(pReply->error(), pReply->errorString());
    

【讨论】:

谢谢。我担心的是,是否有可能“由于错误而实际上已经完成回复并且不会读入更多内容,但是没有发出finished()信号”? @Nyaruko 实际上我们对这样的处理程序感到满意。我们还连接 networkAccessManager.post() 返回的 QNetworkReply::sslErrors 信号。 就我而言,我只是通过普通 http 下载一些文件(其中一些可能很大,比如 100MB)。是否有必要担心 sslErrors?您使用的是什么版本的 Qt? 我们从 Qt 5.3 开始,现在是 Qt 5.5。当然,https 需要 sslErrors,并且主要发生在第一次发布或获取尝试期间。我们处理安全问题。 不仅https需要sslErrors。

以上是关于QNetworkReply::error 信号何时会跟随finished() 信号?的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 何时编辑 QListWidget 行的信号?

`QTreeView` 何时在 Mac 上发出激活信号?

PyQt4:如何/何时从 QTabWidget 的子类发出自定义信号?

风格 - 何时序列化 Django 模型实例:信号与模型的保存方法

条件变量与信号量

Java - 记录和捕获