Should I connect to QNetworkReply::error() as well?

一个人想着一个人 提交于 2019-12-22 11:28:02

问题


I have created a POST request and I connect to the finished() signal:

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

I want to be notified when the POST request has finished, regardless of whether it failed or succeeded.

I have noticed in the documentation that there is also a QNetworkReply::error() signal, do I need to connect to it, too, or will finished() be called in all cases?


回答1:


Qt documentation states:

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

This signal is emitted when the reply detects an error in processing. The finished() signal will probably follow, indicating that the connection is over.

From what I've seen in Qt sources (was checking absolutely same issue recently), everywhere after error(), there is a finished() call afterwards. In 5.1.0 I haven't found a place where error is not followed by finished()

for example

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();
}



回答2:


The documentation for error() says, "the finished() signal will probably follow", so no, finished() ought to be sufficient. Don't forget to check the error() getter in the signal handler, though.



来源:https://stackoverflow.com/questions/18404483/should-i-connect-to-qnetworkreplyerror-as-well

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!