如何编写Qt HTTP GET请求? [英] How do I write a Qt HTTP GET request?

查看:56
本文介绍了如何编写Qt HTTP GET请求?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用C ++编写一个小的HTTP GET 请求,但找不到解决方案.

I'd like to write a small HTTP GET request in C++ but I'm not finding a solution.

也许我必须使用 QNetworkAccessManager 类,但是我不是C ++专家,所以很难理解有关此类的知识.

Maybe I have to use QNetworkAccessManager class but I'm not an expert in C++ and it's really hard to understand something about this class.

我有一个要提取的URL,它将给我一个JSON响应;我必须提取一个键( key2 )并将值放在变量中.这是一个示例:

I have an URL to fetch, which will give me a JSON response; I have to extract a single key (key2) and put the value in a variable. This is an example:

{"key1": "value1", "key2": "**value2**", "key3": "value3"}

这是我的调试代码:

char value[20]
value = <**value2**>

在此之后,我必须以.ui格式打印此值.

After this I have to print this value in a form .ui

推荐答案

您需要三件事:

  • QNetworkAccessManager *管理器; ->向我们发送请求.
  • QNetworkRequest请求; ->什么类型的需求?获取,发布,...
  • QNetworkReply .->答案是什么?
  • QNetworkAccessManager * manager; -> To send us a request.
  • QNetworkRequest request; -> what type of demand? get, post, ...
  • QNetworkReply. -> What's the answer?

更多详细信息:

http://doc.qt.io/qt-5/qnetworkrequest.html#details

http://doc.qt.io/qt-5/qnetworkreply.html#details

例如:

.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    manager = new QNetworkAccessManager();
    QObject::connect(manager, &QNetworkAccessManager::finished,
        this, [=](QNetworkReply *reply) {
            if (reply->error()) {
                qDebug() << reply->errorString();
                return;
            }

            QString answer = reply->readAll();

            qDebug() << answer;
        }
    );
}

void MainWindow::on_pushButton_clicked()
{
    request.setUrl(QUrl("http://url"));
    manager->get(request);
}

MainWindow::~MainWindow()
{
    delete ui;
    delete manager;
}

.h文件

private:
    Ui::MainWindow *ui;
    QNetworkAccessManager *manager;
    QNetworkRequest request;

编辑LAMBDA广告位:如果不使用lambda SIGNAL SLOT.

EDIT LAMBDA SLOT: if not use lambda SIGNAL SLOT.

在.h文件中描述一个插槽例如:

Discribe one slot in your .h file for example:

private slots:
    void managerFinished(QNetworkReply *reply);

在.cpp构造函数中,将lambda替换为

in .cpp constructor replace lambda to

QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
    this, SLOT(managerFinished(QNetworkReply*)));

现在在您的插槽中:

void MainWindow::managerFinished(QNetworkReply *reply) {
    if (reply->error()) {
        qDebug() << reply->errorString();
        return;
    }

    QString answer = reply->readAll();

    qDebug() << answer;
}

这篇关于如何编写Qt HTTP GET请求?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆