QNetWork简单的get/post请求

1、VS新建Qt application项目

......

2、绘制ui界面

 

3、编码

3.1、头文件

 1 #pragma once
 2 
 3 #include <QtWidgets/QMainWindow>
 4 #include <QNetworkAccessManager>
 5 #include <QNetworkRequest>
 6 #include <QNetworkReply>
 7 #include "ui_QtGuiApplication1.h"
 8 
 9 class QtGuiApplication1 : public QMainWindow
10 {
11     Q_OBJECT
12 
13 public:
14     QtGuiApplication1(QWidget *parent = Q_NULLPTR);
15     QByteArray request(QString request_url);
16     QByteArray request(QString request_url, QByteArray &data);
17 public slots:
18     void getData();
19     void postData();
20 private:
21     Ui::QtGuiApplication1Class ui;
22 };
QtGuiApplication1.h

3.2、源文件

 1 #include "QtGuiApplication1.h"
 2 
 3 QtGuiApplication1::QtGuiApplication1(QWidget *parent)
 4     : QMainWindow(parent)
 5 {
 6     ui.setupUi(this);
 7     connect(ui.getButton, &QPushButton::clicked, this, &QtGuiApplication1::getData);
 8     connect(ui.postButton, &QPushButton::clicked, this, &QtGuiApplication1::postData);
 9 }
10 
11 QByteArray QtGuiApplication1::request(QString request_url)
12 {
13     QNetworkAccessManager manager;
14     QNetworkReply *reply = manager.get(QNetworkRequest(request_url));
15 
16     /* 读取请求的数据 */
17     QEventLoop loop;
18     connect(&manager, &QNetworkAccessManager::finished, &loop, &QEventLoop::quit);
19     loop.exec();
20 
21     /* 读取请求的数据 */
22     QByteArray recevied_data = reply->readAll();
23 
24     /* 释放 reply 内存, 否则会造成内存泄漏 */
25     delete reply;
26     reply = nullptr;
27 
28     return recevied_data;
29 }
30 
31 QByteArray QtGuiApplication1::request(QString request_url, QByteArray &data)
32 {
33 
34     QNetworkAccessManager manager;
35 
36     /* 新的数据请求 */
37     QNetworkRequest request(request_url);
38     //request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
39     request.setRawHeader("Content-Type", "application/json");//服务器要求的数据头部
40     request.setRawHeader("Accept", "*/*");//服务器要求的数据头部
41     /* POST 请求 */
42     QNetworkReply *preply = manager.post(request, data);
43 
44     /* 等待返回请求结果 */
45     QEventLoop loop;
46     connect(&manager, SIGNAL(finished(QNetworkReply *)), &loop, SLOT(quit()));
47     loop.exec();
48 
49     /* 读取结果 */
50     QByteArray result = preply->readAll();
51 
52     /* 释放 preply 内存, 否则造成内存泄漏 */
53     delete preply;
54     preply = nullptr;
55 
56     return result;
57 }
58 
59 void QtGuiApplication1::getData()
60 {
61     QByteArray data = request("http://10.194.142.21:8080/user/selectAll");
62     ui.getBrowser->setText(data);
63 }
64 
65 void QtGuiApplication1::postData()
66 {
67     QByteArray body("{\"id\":12138,\"name\":\"qdl\"}");
68     QByteArray data = request("http://10.194.142.21:8080/user/addUser", body);
69     ui.postBrowser->setText(data);
70 }
QtGuiApplication1.h

4、测试

代码中请求的地址是我自己写的restful接口,跑着本地。

4.1、你可以debug模式调试该程序

 

 

 

 4.2、或者release删除exe成果物后配置依赖库后双击exe程序启动。

 

posted @ 2022-02-15 17:04  ygtrece  阅读(180)  评论(0)    收藏  举报