gpt4 book ai didi

c++ - 如何编写 Qt HTTP GET 请求?

转载 作者:可可西里 更新时间:2023-11-01 18:08:48 29 4
gpt4 key购买 nike

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

也许我必须使用 QNetworkAccessManager 类,但我不是 C++ 专家,很难理解关于这个类的一些东西。

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

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

这是我的调试代码:

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

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

最佳答案

你需要三样东西:

  • QNetworkAccessManager * manager; -> 向我们发送请求。
  • QNetworkRequest 请求; -> 什么类型的需求?获取、发布、...
  • QNetworkReply。 -> 答案是什么?

更多详情:

例如:

.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。

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

private slots:
void managerFinished(QNetworkReply *reply);

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

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;
}

关于c++ - 如何编写 Qt HTTP GET 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46943134/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com