Как запустить почтовый запрос в qt main () - PullRequest
0 голосов
/ 29 января 2019

Я хотел бы сделать простой почтовый запрос в main.cpp.Казалось бы, когда я запускаю приложение, оно не выполняет код и просто пропускает его.

Я пытался использовать отладчик qt, но код, приведенный ниже, после запуска отладчика, просто сразу завершает работу.

Я проверил мой API с почтальоном и знаю, что он работает

main.cpp

#include <iostream>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QNetworkInterface>

using namespace std;
int main()
{
QByteArray jsonString = "{\"ipaddr\": "+ QByteArray::number(9) + ",\"transactionType\":"+QByteArray::number(10) + ",\"idEmployee\":"+QByteArray::number(10) +"}";


QNetworkRequest request(QUrl("http://192.168.1.25:3000/classlog/pi"));
request.setRawHeader("Content-Type", "application/json");

QNetworkAccessManager * manager = new QNetworkAccessManager();
manager->post(request, jsonString);

}

.pro

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
QT += network core

SOURCES += \
    main.cpp

Я ожидаю, что смогуполучить запрос на моем сервере, но я не получаю.Спасибо

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Qt использует систему событий.Ваш сетевой менеджер будет только планировать запрос, который будет обработан в цикле событий.Это также, где ответ получен.

Вам нужен работающий цикл обработки событий (и фактически, объект QCoreApplication, вы должны получить предупреждение при выполнении вашего кода).

#include <QtNetwork>

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);
    QNetworkAccessManager mgr;
    QNetworkRequest req(QUrl("http://stackoverflow.com"));
    auto *resp = mgr.get(req);
    QObject::connect(resp, &QNetworkReply::finished, [&]() {
        qDebug() << "FINISHED";
        if (resp->error() != QNetworkReply::NoError)
            qDebug() << "Error: " << resp->errorString();
        else
            qDebug() << "Status: " << resp->attribute(QNetworkRequest::HttpStatusCodeAttribute).toString();

        // Stop when a response is received
        app.quit();
    });

    // This will start the event loop that will eventually send the request and receive the response.
    // It will run until you call app.quit()
    return app.exec();
}
0 голосов
/ 29 января 2019

вы почти у цели:

connect the signals:

QtObject::connect(your_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(onResult(QNetworkReply *)));

send something:
QNetworkRequest request(your_URL);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
QByteArray byteArray;
byteArray.append(your_json);

your_manager->post(request, byteArray);


read the answer in the slot:
void FOO_CLASS::onResult(QNetworkReply* reply)
{
    QString resp = QString::fromUtf8(reply->readAll());
}

редактировать:

QObject::connect(your_manager, &QNetworkAccessManager::finished, [](QNetworkReply * r){
    QString x{r->readAll()};
    //foo1
    auto l{x.length()};
    //foo2
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...