2

Я проверял несколько простых примеров использования QNetworkAccessManager, и я нашел, что это (при условии, что менеджер является QNetworkAccessManager:Qt: подключить сигнал после того, как запрос отправляется в QNetworkAccessManager

QNetworkRequest request; 
request.setUrl(QUrl("http://www.someserver.com")); 

QNetworkReply *reply = manager->get(request); 
connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead())); 
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), 
    this, SLOT(slotError(QNetworkReply::NetworkError))); 
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), 
    this, SLOT(slotSslErrors(QList<QSslError>))); 

Насколько я понимаю, call to manager-> get отправит запрос GET. Слоты для обработки ответа на этот запрос, однако, подключены только после звонок отправляется, что, похоже, не имеет смысла для меня. Здесь мой вопрос:

  • не проблема для подключения слотов к сигналам после завершения запроса? Может ли случиться, что запрос сделан, и сигналы выдаются до того, как произойдет соединение, и, следовательно, что сигналы пропущены и никогда не обрабатываются соответствующими слотами?

Спасибо!

L.

UPDATE: Как отметил cyber_raj, этот вопрос уже ответил здесь: Qt signal slot connection - QNetworkAccessManager

ответ

1

Не проблема. Вызова прибудут является асинхронным: http://doc.qt.io/qt-5/qnetworkaccessmanager.html#details

QNetworkAccessManager очередь запросов, которые он получает, и работает 6 асинхронных задач в время. Таким образом, нет места для сообщения об ошибке.

Но если вы боитесь, вы можете попробовать первый пример, соединяя сигналы менеджера:

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
connect(manager, SIGNAL(finished(QNetworkReply*)), 
     this, SLOT(replyFinished(QNetworkReply*))); 

manager->get(QNetworkRequest(QUrl("http://qt-project.org"))); 
+0

На странице вы вывесили гласит: «6 запросов выполняются параллельно для одного хоста комбинации/порта в HTTP». Если я получу это правильно, это означает, что если обрабатывается менее 6 запросов для одной и той же комбинации хостов и портов, мой запрос будет выполнен сразу, поэтому я думаю, что вопрос остается. – mortadelo