2

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

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

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

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

4

2 回答 2

1

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

于 2013-08-23T13:52:09.347 回答
1

Qt 文档指出:

void QNetworkReply::error(QNetworkReply::NetworkError 代码) [信号]

当回复检测到处理中的错误时,会发出此信号。可能会出现finished() 信号,表明连接已经结束。

从我在 Qt 源代码中看到的内容(最近检查了完全相同的问题),在 error() 之后的任何地方,之后都有一个 finished() 调用。在 5.1.0 中,我还没有找到一个地方,错误后面没有finished()

例如

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();
}
于 2013-08-23T13:54:59.880 回答