我应该连接到QNetworkReply :: error()吗?

时间:2013-08-23 13:46:34

标签: c++ qt qtnetwork

我创建了一个POST请求,并连接到finished()信号:

QNetworkReply *reply = manager->post(request, postData.encodedQuery());
connect(reply, SIGNAL(finished()), this, SLOT(accept()));

我希望在POST请求完成时收到通知,无论它是失败还是成功。

我在文档中已经注意到还有一个QNetworkReply::error()信号,我是否也需要连接它,或者在所有情况下都会调用finished()

2 个答案:

答案 0 :(得分:1)

error()的文档说“finished()信号可能会跟随”,所以不,finished()应该足够了。不过,不要忘记检查信号处理程序中的error() getter。

答案 1 :(得分:1)

Qt文档声明:

  

void QNetworkReply :: error(QNetworkReply :: NetworkError code)[signal]

     

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

从我在Qt源中看到的(最近检查完全相同的问题),在error()之后的任何地方,之后都有一个完成()调用。在5.1.0中,我还没有找到一个错误未被finish()

跟踪的地方

例如

void QNetworkReplyImpl::close()
{
    Q_D(QNetworkReplyImpl);
    if (d->state == QNetworkReplyImplPrivate::Aborted ||
        d->state == QNetworkReplyImplPrivate::Finished)
        return;

    // stop the download
    if (d->backend)
        d->backend->closeDownstreamChannel();
    if (d->copyDevice)
        disconnect(d->copyDevice, 0, this, 0);

    QNetworkReply::close();

    // call finished which will emit signals
    d->error(OperationCanceledError, tr("Operation canceled"));
    d->finished();
}