Слот не вызван для завершения сигнала QNetworkAccessManager
Я хочу отправить запрос на сервер, и я делаю что-то вроде этого:
function makePost(){
QNetworkAccessManager *networkManager = new QNetworkAccessManager();
qDebug()<<"1";
bool ret = connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*)));
qDebug()<<"2: " <<ret;
QUrl serviceUrl = QUrl("http://someurl/json");
QNetworkRequest request(serviceUrl);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
QString content = "";
networkManager->post(request, content.toUtf8());
}
Но слот serviceRequestFinished()
не называется вообще! Я должен упомянуть, что я использовал Wireshark для отслеживания запроса / ответа, и я обнаружил, что запрос (сообщение) отправляется, и сервер возвращает ответ обратно со статусом 200
(Хорошо). Так же ret
переменная возвращает true
соединение между сигналом и слотом выполнено успешно. Кто-нибудь из вас имеет представление, почему это не работает? Спасибо!:)
РЕДАКТИРОВАТЬ
Код, который вызывает проблему - см. Мой ответ - это:
{
MyObjectWithSlot obj;
obj.makePost();
}
2 ответа
Итак, я нашел свою ошибку! Вы можете отклонить столько, сколько хотите, на мой ответ или вопрос, но я хотел бы ответить, если у кого-то еще есть подобная проблема!
Быть осторожен! Объект, имеющий слот, должен находиться в области видимости и не завершаться (уничтожаться) до вызова слота. Как вы можете видеть в отредактированной части моего вопроса, объект создан, он вызывает функцию, а затем выходит за рамки!
{
MyObjectWithSlot obj;
return obj.makePost();
}
Вы должны сказать Qt подключить сигнал finished()
, который называется, когда post()
заканчивается, на слот по вашему выбору. Что-то вроде следующего:
QObject::connect(networkManager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
Для получения дополнительной информации о сигналах и слотах, смотрите эту страницу.