qt怎么接收post数据_C++学习笔记(五) - Qt POST

这篇博客介绍了如何在Qt中接收POST数据并处理JSON。通过包含相关头文件,创建JSON对象,发送POST请求,并处理可能的精度问题。同时,文章提到了在发送数据时可能出现的问题以及解决方法,确保POST请求的正确执行。
摘要由CSDN通过智能技术生成

由于最近同时做两个方向的东西,而且有一个方向比较紧迫,没有时间接着写学习笔记,感觉十分的不开心,抓紧时间再写一点,ROS方面的可能暂时会慢一点

参考链接

1 包含头文件

#include

#include

2 生成json

QJsonObject json_in;

QJsonObject json;

QJsonDocument docum;

QByteArray data_json;

json_in.insert("addr",addr);

json_in.insert("num",num);

json_in.insert("status",status);

json.insert("code",200);

json.insert("result",json_in);

docum.setObject(json);

data_json=docum.toJson(QJsonDocument::Compact);

注意:测试时发现,float插入到json时,会由于进行了float到double的转换过程中,数据精度会发生转换,建议直接使用double.

3 插曲:解析json

void websocketserver::Re_con_cmd(QString message)

{

QString addr;

int num;

int con_switch;

QJsonParseError json_error;

QJsonDocument parse_doucment = QJsonDocument::fromJson(message.toUtf8(), &json_error);

if(json_error.error == QJsonParseError::NoError)

{

if(parse_doucment.isObject())

{

QJsonObject obj = parse_doucment.object();

if(obj.contains("action"))

{

QJsonValue action_value = obj.take("action");

if(action_value.toString()=="control")

{

if(obj.contains("addr"))

{

QJsonValue addr_value = obj.take("addr");

addr = addr_value.toString();

cmd[4]=Qchrtouchar(addr.at(0))*16+Qchrtouchar(addr.at(1));

cmd[5]=Qchrtouchar(addr.at(2))*16+Qchrtouchar(addr.at(3));

//qDebug()<

}

if(obj.contains("num"))

{

QJsonValue num_value = obj.take("num");

num = num_value.toInt();

cmd[8]=num;

}

if(obj.contains("switch"))

{

QJsonValue con_switch_value = obj.take("switch");

con_switch = con_switch_value.toInt();

cmd[10]=con_switch;

}

emit control_cmd(addr,cmd);

}

}

}

}

4 POST

在头文件中声明:

QNetworkAccessManager *m_accessManager;

在cpp中实例化:

m_accessManager= new QNetworkAccessManager(this);

发送函数:

void post_data::post_to_server(QByteArray data,QString addr)

{

QUrl url(addr);

QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));

QNetworkReply *reply = m_accessManager->post(request,data);

qDebug()<error();

}

写得有点简介,因为最近比较忙.

注意:这里可能会出现一个问题,就是还没有发送完,对象就已经被解析了,会导致发送失败.解决这个问题的方法就是获取发送完成的信号,写一个槽函数接收.

大概如下:

连接信号:

connect(m_accessManager,&QNetworkAccessManager::finished,this,&post_data::quit_thread);

槽函数,退出本子线程,删除对象,我是在子线程里面处理的:

void post_data::quit_thread()

{

//qDebug()<

this->deleteLater();

this->thread()->quit();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值