如何编写Qt HTTP GET请求? [英] How do I write a Qt HTTP GET request?
问题描述
我想用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屋!