Qt的network用法备注

Qt Network 模块中提供了一些高级别的类,例如:QNetworkRequest、QNetworkReply 和 QNetworkAccessManager,使用常见的协议执行网络操作。


一、链接远程接口

第一步:实例化一个管理器

   QNetworkAccessManager *manager 

                    = new QNetworkAccessManager();

第二步:建立请求

   QNetworkRequest request;

   request.setUrl(QUrl(urlStr));

第三步:请求

   reply = manager->get(request);

补充:请求完之后的操作

   connect(reply,SIGNAL(finished()),this,

                                            SLOT(replyFinished()));

补充:如何用post进行数据form提交

   1、request设置头部:

request.setHeader(

QNetworkRequest::ContentTypeHeader,

"application/x-www-form-urlencoded"

);//post 请求的头部

   2、提交参数定义成 QByteArray: postArray.append("userId = 1");

   3、post请求: reply = manager->get(request,QByteArray);


二、对接口数据进行解析

第一步:防止内存泄漏

   reply->deleteLater();// 或者是C++和QT通用的 reply->delete();

第二步:将接口返回的数据存储到字节数组中

   QByteArray resultContent = reply->readAll();

第三步: 报告 JSON 处理过程中出现的错误

   QJsonParseError json_error;

第四步:读写JSON文档

   QJsonDocument parse_doucment = QJsonDocument::fromJson(resultContent, &json_error);

判断条件:!parse_doucment.isNull() && json_error.error == QJsonParseError::NoError

第四步:如果是数组封装json数组 否则执行第六步

    QJsonArray array = parse_doucment.array();

第五步:循环数组并取值


for(int i=0; i<array.size();i++)

{

    QJsonValue value = array.at(i);

    QString title = value.toObject().take("title").toString();//标题

}

第六步:如果不是数组直接转换成对象进行取值

   QJsonObject object = parse_doucment.object();  // 转化为对象

   QJsonValue value_isSuc = object.value("isSuc")


座右铭

你现在因走捷径所节省的所有路程,不久的将来都要靠数倍乃至数十倍的弯路来弥补......

关于我

网名:TIME60S | 刘俊

职业:PHP web 工作

技能:LAMP(web开发)

QQ:781827559

邮箱:781827559@qq.com

合作站长

杨青博客

关注微信公众号