Слот не вызван для завершения сигнала 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*)));

Для получения дополнительной информации о сигналах и слотах, смотрите эту страницу.

Другие вопросы по тегам