2013-08-23 2 views
2

Я создал запрос POST и подключиться к finished() сигнала:Должен ли я подключаться к QNetworkReply :: error()?

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

Я хочу получать уведомления, когда запрос POST завершится, независимо от того, удалось ли это или это удалось.

Я заметил в документации, что есть также сигнал QNetworkReply::error(), мне также нужно подключиться к нему, или будет вызван во всех случаях finished()?

ответ

1

Qt документации говорится:

аннулируются QNetworkReply :: Ошибка (QNetworkReply :: NetworkError код) [сигнал]

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

Из-за того, что я видел в источниках Qt (недавно была проверена абсолютно такая же проблема), везде после ошибки() после этого происходит завершенный() вызов. В 5.1.0 я не нашел место, где ошибку не следует законченному()

, например

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

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

+0

Я задавался вопрос о «возможно» части в основном. Это было довольно неоднозначно. Они не говорят, что это верная вещь. – sashoalm

+0

Правда, это вроде как подозрительно. На вашем месте я бы начал читать источник Qt, чтобы понять, где запущен 'error()', и выяснить, будет ли это когда-либо предотвращать срабатывание 'finished()'. Это хорошая вещь, когда у вас есть источник, а Qt более читабельна, чем большинство вещей, которые я знаю. –

Смежные вопросы