1、首先创建一个qt程序,在.pro文件中加入网络协议,即最底层加入一行

QT       += network

2、接着就是在工程文件的.h文件中添加要进行的操作

#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QTimer>
#include <QLabel>

加上这几个声明之后接着在private slots处添加

private slots:
    void handleNetworkReply(QNetworkReply *reply);  // 处理网络响应
    void handlePostReply(QNetworkReply *reply);

这两个函数一个是处理get请求用的一个是处理post请求用的。

然后再在private处添加

private:
    
    QNetworkAccessManager *networkManager;  // 网络管理器
    QTimer *refreshTimer;  // 定时器成员变量
    void fetchTowerInfo(); // 数据获取函数
    void postTowerInfo(); // 数据发送函数

这个定时器变量我是用来自动获取已经发送数据用的,也可以通过点击发送数据,即对按钮转到槽,点击操作之后用来函数操作即可。

这样在.h文件中就搭建好基础的请求了,然后来到与.h文件对应的.cpp文件中。

#include <QNetworkRequest>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
#include <QUrlQuery>
#include <QMessageBox>

需要用到的一些声明,接着

Main****::Main****(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Main****)
{
    ui->setupUi(this);
    // 初始化网络管理器
    networkManager = new QNetworkAccessManager(this);
    refreshTimer = new QTimer(this);  // 现在QTimer类型已完整

    // 设置定时刷新(示例:每60秒)
    connect(refreshTimer, &QTimer::timeout, this, &MainWindow_3::fetchTowerInfo);
    connect(refreshTimer, &QTimer::timeout, this, &MainWindow_3::postTowerInfo);
    refreshTimer->start(600000);

        // 立即执行首次获取
        fetchTowerInfo();
        postTowerInfo();


}

get请求数据 

//get服务器数据请求
void Main****::fetchTowerInfo()
{
    QUrl url("http://*******/*****");//要访问的url地址
    QUrlQuery query;
    query.addQueryItem("**", "****");//访问的关键字
    url.setQuery(query);

    QNetworkRequest request(url);
    QNetworkReply *reply = networkManager->get(request);

    connect(reply, &QNetworkReply::finished, [this, reply]() {
        handleNetworkReply(reply);
    });
}
void MainWindow_3::handleNetworkReply(QNetworkReply *reply) {
    if (reply->error() == QNetworkReply::NoError) {
        ui->tbtn_data_status->setIcon(QIcon(":/pic/HTTP.png"));//这个是对于get数据的ui验证,可以不用
        QByteArray data = reply->readAll();
        QJsonParseError parseError;
        QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &parseError);

        // 调试:打印原始JSON数据
        qDebug() << "原始JSON数据:" << data;

        if (parseError.error == QJsonParseError::NoError && !jsonDoc.isNull()) {
            if (jsonDoc.isObject()) {
                QJsonObject jsonObj = jsonDoc.object();

                // 检查是否存在"data"字段
                if (jsonObj.contains("data") && jsonObj["data"].isObject()) {
                    QJsonObject dataObj = jsonObj["data"].toObject();

                    // 通用函数:安全提取任意JSON值并转为字符串
                    auto safeGetValue = [](const QJsonObject &obj, const QString &key) -> QString {
                        if (!obj.contains(key)) return QString("[字段不存在]");

                        QJsonValue value = obj.value(key);
                        if (value.isString()) {
                            return value.toString();
                        } else if (value.isDouble()) {
                            return QString::number(value.toInt()); // 或 toDouble()保留小数
                        } else if (value.isBool()) {
                            return value.toBool() ? "true" : "false";
                        } else if (value.isObject() || value.isArray()) {
                            return QString(QJsonDocument(value.toObject()).toJson());
                        } else {
                            return "[未知类型]";
                        }
                    };

                    // 更新UI控件(支持所有数据类型)
                    ui->lb_anti->setText(QString::fromUtf8(data)); // 示例字段,该字段为显示所有返回的服务器报文

//下列的字段为显示服务器返回的数据中指定的数据的内容
//                    ui->lb_1_id->setText(safeGetValue(dataObj, "ename"));
//                    ui->lb_2->setText(safeGetValue(dataObj, "id"));
//                    ui->lb_t2e->setText(safeGetValue(dataObj, "1"));
//                    ui->lb_d3->setText(safeGetValue(dataObj, "2e"));
//                    ui->lb_4->setText(safeGetValue(dataObj, "m3l")); // 假设字段名为date

                } else {
                    ui->lb_anti->setText("错误:JSON中缺少data对象");
                }
            } else {
                ui->lb_anti->setText("错误:JSON不是对象");
            }
        } else {
            ui->lb_anti->setText("JSON解析错误: " + parseError.errorString());
        }
    } else {
        ui->tbtn_data_status->setIcon(QIcon(":/pic/HTTP_error.png"));
        ui->lb_anti->setText("网络错误: " + reply->errorString());
    }
    reply->deleteLater();
}

然后是post请求

//post发送数据向服务器
void Main*****::postTowerInfo()//get服务器数据请求
{
    // 1. 从UI控件收集数据
       QJsonObject postData;
       postData["1"] = 1;  // 示例固定ID
       postData["2"] = ui->lb_2->text().toDouble();
       postData["3"] = ui->lb_1->text().toDouble();
       postData["4"] = ui->lb_r2n->text().toDouble();
       postData["8"] = ui->lb_3->text().toDouble();
       postData["5"] = ui->lb_5d->text().toDouble();
       postData["6t"] = ui->lb_4->text().toDouble();



       // 2. 转换为JSON格式
       QJsonDocument doc(postData);
       QByteArray jsonData = doc.toJson();

       // 3. 设置请求头
       QUrl url("http://******:80/****");
       QNetworkRequest request(url);
       request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
       // 4. 发送POST请求
       QNetworkReply *reply = networkManager->post(request, jsonData);
       connect(reply, &QNetworkReply::finished, [this, reply]() {
           handlePostReply(reply);
       });

       // 可选:禁用按钮防止重复提交
//       ui->pbtn_save->setEnabled(false);
}
// 处理POST响应
void MainWindow_3::handlePostReply(QNetworkReply *reply)
{

//    if (reply->error() == QNetworkReply::NoError) {
//        QByteArray response = reply->readAll();
//        QMessageBox::information(this, "成功", "数据更新成功!\n" );
//    } else {
//        QMessageBox::critical(this, "错误", "提交失败: " + reply->errorString());
//    }
//    reply->deleteLater();
    if (reply->error() == QNetworkReply::NoError) {
            QByteArray data = reply->readAll();
            QJsonDocument jsonDoc = QJsonDocument::fromJson(data);

            if (!jsonDoc.isNull() && jsonDoc.isObject()) {
                QJsonObject jsonObj = jsonDoc.object();

                // 检查服务器返回的业务状态码
                int code = jsonObj["code"].toInt();
                QString message = jsonObj["message"].toString();

                if (code == 200) {  // 假设200表示成功
                    QJsonObject dataObj = jsonObj["data"].toObject();
                    // 正常处理数据...
//                    ui->le_current_height->setText(QString::number(dataObj["height"].toDouble()));
                    QMessageBox::information(this, "成功", "数据更新成功!\n" );
                } else {
                    // 显示服务器返回的错误信息
                    QMessageBox::warning(this, "操作失败",
                        QString("错误码: %1\n错误信息: %2").arg(code).arg(message));

                    // 可选:标记UI状态
 //                    ui->lb_status->setText("状态: 异常");
 //                    ui->lb_status->setStyleSheet("color: red;");
                }
            }
        } else {
            // 网络层错误
            QMessageBox::critical(this, "网络错误", reply->errorString());
        }
        reply->deleteLater();

}

然后就可以了

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐