Должен ли я также подключаться к QNetworkReply::error()?


person sashoalm    schedule 23.08.2013    source источник


Ответы (2)


Документация Qt гласит:

void QNetworkReply::error (код QNetworkReply::NetworkError) [сигнал]

Этот сигнал испускается, когда ответ обнаруживает ошибку в обработке. Вероятно, последует сигнал finish(), указывающий на завершение соединения.

Из того, что я видел в исходниках Qt (недавно проверял абсолютно ту же проблему), везде после error() после этого есть вызов finish(). В 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();
}
person evilruff    schedule 23.08.2013

В документации для error() сказано, что "скорее всего, последует сигнал finished()", так что нет, finished() должно быть достаточно. Однако не забудьте проверить геттер error() в обработчике сигнала.

person Sebastian Redl    schedule 23.08.2013
comment
Я в основном интересовался вероятной частью. Получилось довольно двусмысленно. Они не говорят, что это наверняка. - person sashoalm; 23.08.2013
comment
Правда, как-то подозрительно. На вашем месте я бы начал читать исходный код Qt, чтобы понять, где срабатывает error(), и выяснить, не помешает ли это когда-либо срабатывать finished(). Это хорошо, когда у вас есть исходный код, а Qt более удобочитаем, чем большинство известных мне вещей. - person Sebastian Redl; 23.08.2013