Qt 通过http获取数据

 null近期会陆续推出以下系列课程: 1、《Qt 开发笔记 - 基础篇》 2、《Qt 开发笔记 - 进阶篇》 3、《Qt 开发笔记 - 专题篇》 4、《Qt 开发笔记 - 项目篇》大家可以加QQ群:996712118 找到志同道合的小伙伴,共同学习进步!如果能帮助到你,【一键三连 + 关注】 支持下哦,你的支持是我持续更新的动力,感谢!, 视频播放量 2338、弹幕量 4、点赞数 103、投硬币枚数 100、收藏人数 35、转发人数 7, 视频作者 大轮明王讲Qt, 作者简介 分享QT项目经验 | 嵌入式QT开发经验 | QQ交流群:996712118,相关视频:【QT开发专题-天气预报】10. Qt 中 Http 相关的类,【QT开发专题-天气预报】11. 新建工程, 右键菜单,【QT开发专题-天气预报】15. 解析天气数据,【QT开发专题-天气预报】12. 界面布局,【QT开发专题-天气预报】13. 窗口随鼠标移动,【QT开发专题-天气预报】2. JSON 简介,【QT开发笔记-基础篇】| 第一章 QT入门 | 1.8 信号槽扩展,【QT开发专题-天气预报】1. 效果演示、技术分析,【QT开发笔记-基础篇】| 第一章 QT入门 | 1.3 新建Qt工程,【QT开发笔记-基础篇】| 第一章 QT入门 | 1.4 项目构建流程https://www.bilibili.com/video/BV12e411V731/?spm_id_from=333.788&vd_source=8907db080287c3791c4b3669d801d840

1. 添加网络模块

如果要使用http获取数据,需要在.pro文件中,添加网路模块: 

QT += core gui network //补充network

2. 申明网络对象 + 槽函数

在mainwindow.h 中添加http通信的QNetworkAccessManager指针对象,用于处理Http 返回数据onReplied 槽函数 

#include <QNetworkAccessMenager>
#include <QNetworkReply>

//在mainwindow.h里加入
private: 
    QNetworkAccessManager* mNetAccessManager;

private slots:
    void onReplied(QNetworkReply* reply);

//在mainwindow.cpp里
mNetAccessManager = new QNetworkAccessManager(this);
//qt中进行http请求的开端 

connect(mNetAccessManager, &QNetworkAccessManager::finished, this, onReplied);//finished信号
//连接信号和slot

3.发送http请求

protected:
  void getWeatherInfo(QString cityCode);

//在构造中请求天气预报:connect(,finished,this) 后面 mainwindow.cpp
  getWeatherInfo("101010100");//101010100 是北京的天气编码

void getWeatherInfo(QString CityCode){
    QUrl url("http://t.weather.itboy.net/api/weather/city/" + cityCode);
    mNetAccessManager->get(QNetworkRequest(url));
}

4. 接受服务端请求

内容全部在Reply里,学习如何使用reply的各种函数从中获得数据是很重要的学习。

void MainWindow::onReplied(QNetworkReply* reply){
    //所有内容都储存在reply里面
    //响应码 200, 表示请求成功;404,表示not found
    int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    qDebug() << "operation: " << reply->operation(); //请求方式
    qDebug() << "status code: " << status_code;
    qDebug() << "url: " << reply->url();
    qDebug() << "raw header: " <<reply->rawHeaderList();
    //以上可要可不要,仅做学习功能处理

    if( reply->error() != QNetworkReply::NoError || status_code != 200){//俩个方法取其一即可
        QMessageBox::warning(this, "天气", "请求数据失败!", QMessageBox::ok);
    }else {
        //获取响应信息
        QByteArray reply_data = reply->readAll();
        qDebug() << "read all: " << byteArray.data();
        //parseJson()
    }
    
    reply->deleteLater();//把数据删除,防止内存过度占用
}

这一章实话实说有点没懂,要多做多看多思考,最好做出自己的创意作品 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值