qt6 通过http查询天气的实现

步骤如下: 

  1. cmakelist 当中,增加如下配置
  2.  引入包
  3.  访问远端api
  4.  解析返回的数据

  1. cmakelist 当中,增加如下配置,作用是引入Network库。
    1.  引入包

 3、访问远端api

void Form1::on_pushButton_clicked()
{//根据URL(http://t.weather.itboy.net/api/weather/city/101010100)http请求查询温度信息QNetworkAccessManager *manager = new QNetworkAccessManager(this);   //网络管理器QNetworkRequest request;   //请求request.setUrl(QUrl("http://t.weather.itboy.net/api/weather/city/101010100"));   //设置urlQNetworkReply *reply = manager->get(request); //发送get请求connect(reply, &QNetworkReply::finished, [=](){   //请求完成后的处理if(reply->error() == QNetworkReply::NoError)  {QByteArray data = reply->readAll();QJsonParseError json_error;QJsonDocument doc = QJsonDocument::fromJson(data, &json_error);  //解析json数据if(json_error.error == QJsonParseError::NoError)  {if(doc.isObject())  {QJsonObject obj = doc.object();  //获取json对象if(obj.contains("data"))  //判断是否包含data{QJsonValue value = obj.value("data");  //获取data数据if(value.isObject()){QJsonObject data = value.toObject();  //获取data对象if(data.contains("wendu"))   //判断是否包含wendu{QJsonValue wendu = data.value("wendu");   //获取温度ui->label->setText("温度:" + wendu.toString());  //显示温度}}}}}}reply->deleteLater();  //释放资源  这个很重要!!!});}

这段代码是在Qt框架中,特别是使用Qt Network模块,来实现一个HTTP GET请求以查询指定城市的天气温度信息。这里详细解释每一步的作用和目的:

  1. 创建QNetworkAccessManager实例

  2. QNetworkAccessManager *manager = new QNetworkAccessManager(this);

    QNetworkAccessManager是Qt中用于发送网络请求的类。这里创建了一个QNetworkAccessManager的实例,并将this(假设是某个QWidget或QObject的子类,如Form1)作为父对象。这样做可以确保当Form1被销毁时,QNetworkAccessManager也会被正确地销毁。

  3. 设置请求

  4. QNetworkRequest request; 
    request.setUrl(QUrl("http://t.weather.itboy.net/api/weather/city/101010100"));

    创建一个QNetworkRequest对象并设置其URL为需要查询的天气API的URL。这里假设URL是正确的,并且服务器会返回JSON格式的天气数据。

  5. 发送GET请求

  6. QNetworkReply *reply = manager->get(request);

    通过QNetworkAccessManagerget方法发送GET请求。这个方法返回一个QNetworkReply对象的指针,该对象将用于后续处理HTTP响应。

  7. 处理响应
    使用connect函数将QNetworkReplyfinished信号连接到一个lambda表达式,该表达式在请求完成时执行。

    • 检查错误:首先检查响应中是否有错误。如果没有错误(QNetworkReply::NoError),则继续处理数据。
    • 读取并解析JSON数据:使用readAll方法读取响应数据,然后尝试使用QJsonDocument::fromJson方法解析这些数据为QJsonDocument对象。解析过程中,QJsonParseError对象用于捕获任何可能的解析错误。
    • 遍历JSON对象:解析成功后,检查JSON文档是否是一个对象,并遍历它以查找包含温度信息的data字段。如果找到data字段,并且它是一个对象,则进一步查找wendu(温度)字段。
    • 显示温度:如果找到wendu字段,将其值转换为字符串,并设置到UI的某个标签(假设为ui->label)上。
  8. 资源释放

  9. reply->deleteLater();

    在lambda表达式的末尾调用deleteLater方法。这是为了确保在lambda表达式执行完毕后,QNetworkReply对象能够被正确地删除。这是因为QNetworkReply对象在响应完成后仍然占用内存,直接删除可能会导致问题,而deleteLater会将其放入事件循环中稍后删除。

注意

  • 我们图形化界面中 ui->label
  • 这段代码API返回的数据格式是已知的,
{"message": "success感谢又拍云(upyun.com)提供CDN赞助","status": 200,"date": "20240703","time": "2024-07-03 19:15:24","cityInfo": {"city": "北京市","citykey": "101010100","parent": "北京","updateTime": "15:46"},"data": {"shidu": "51%","pm25": 31.0,"pm10": 42.0,"quality": "优","wendu": "28.6","ganmao": "各类人群可自由活动","forecast": [{"date": "03","high": "高温 31℃","low": "低温 17℃","ymd": "2024-07-03","week": "星期三","sunrise": "04:50","sunset": "19:46","aqi": 67,"fx": "南风","fl": "2级","type": "晴","notice": "愿你拥有比阳光明媚的心情"},{"date": "04","high": "高温 30℃","low": "低温 21℃","ymd": "2024-07-04","week": "星期四","sunrise": "04:51","sunset": "19:46","aqi": 85,"fx": "东南风","fl": "2级","type": "小雨","notice": "雨虽小,注意保暖别感冒"},{"date": "05","high": "高温 32℃","low": "低温 22℃","ymd": "2024-07-05","week": "星期五","sunrise": "04:51","sunset": "19:46","aqi": 94,"fx": "西南风","fl": "2级","type": "多云","notice": "阴晴之间,谨防紫外线侵扰"},{"date": "06","high": "高温 29℃","low": "低温 23℃","ymd": "2024-07-06","week": "星期六","sunrise": "04:52","sunset": "19:45","aqi": 84,"fx": "东北风","fl": "2级","type": "小雨","notice": "雨虽小,注意保暖别感冒"},{"date": "07","high": "高温 32℃","low": "低温 23℃","ymd": "2024-07-07","week": "星期日","sunrise": "04:53","sunset": "19:45","aqi": 84,"fx": "南风","fl": "2级","type": "阴","notice": "不要被阴云遮挡住好心情"},{"date": "08","high": "高温 35℃","low": "低温 23℃","ymd": "2024-07-08","week": "星期一","sunrise": "04:53","sunset": "19:45","aqi": 77,"fx": "西南风","fl": "2级","type": "晴","notice": "愿你拥有比阳光明媚的心情"},{"date": "09","high": "高温 34℃","low": "低温 24℃","ymd": "2024-07-09","week": "星期二","sunrise": "04:54","sunset": "19:44","aqi": 62,"fx": "东南风","fl": "1级","type": "大雨","notice": "出门最好穿雨衣,勿挡视线"},{"date": "10","high": "高温 34℃","low": "低温 25℃","ymd": "2024-07-10","week": "星期三","sunrise": "04:55","sunset": "19:44","aqi": 61,"fx": "东北风","fl": "2级","type": "小雨","notice": "雨虽小,注意保暖别感冒"},{"date": "11","high": "高温 34℃","low": "低温 26℃","ymd": "2024-07-11","week": "星期四","sunrise": "04:55","sunset": "19:44","aqi": 58,"fx": "东南风","fl": "2级","type": "多云","notice": "阴晴之间,谨防紫外线侵扰"},{"date": "12","high": "高温 30℃","low": "低温 25℃","ymd": "2024-07-12","week": "星期五","sunrise": "04:56","sunset": "19:43","aqi": 63,"fx": "东南风","fl": "2级","type": "阴","notice": "不要被阴云遮挡住好心情"},{"date": "13","high": "高温 35℃","low": "低温 25℃","ymd": "2024-07-13","week": "星期六","sunrise": "04:57","sunset": "19:43","aqi": 47,"fx": "东南风","fl": "2级","type": "阴","notice": "不要被阴云遮挡住好心情"},{"date": "14","high": "高温 35℃","low": "低温 25℃","ymd": "2024-07-14","week": "星期日","sunrise": "04:57","sunset": "19:42","aqi": 66,"fx": "东南风","fl": "2级","type": "多云","notice": "阴晴之间,谨防紫外线侵扰"},{"date": "15","high": "高温 32℃","low": "低温 23℃","ymd": "2024-07-15","week": "星期一","sunrise": "04:58","sunset": "19:42","aqi": 61,"fx": "东风","fl": "2级","type": "中雨","notice": "记得随身携带雨伞哦"},{"date": "16","high": "高温 30℃","low": "低温 21℃","ymd": "2024-07-16","week": "星期二","sunrise": "04:59","sunset": "19:41","aqi": 54,"fx": "东风","fl": "2级","type": "中雨","notice": "记得随身携带雨伞哦"},{"date": "17","high": "高温 35℃","low": "低温 23℃","ymd": "2024-07-17","week": "星期三","sunrise": "05:00","sunset": "19:40","aqi": 46,"fx": "西南风","fl": "2级","type": "多云","notice": "阴晴之间,谨防紫外线侵扰"}],"yesterday": {"date": "02","high": "高温 25℃","low": "低温 17℃","ymd": "2024-07-02","week": "星期二","sunrise": "04:50","sunset": "19:46","aqi": 25,"fx": "北风","fl": "2级","type": "小雨","notice": "雨虽小,注意保暖别感冒"}}
}
  • 由于网络请求是异步的,用户界面不会阻塞,这提供了更好的用户体验。槽函数在这里功不可没!另外 感谢哈工程大学通讯专业的同学,上面代码不是我写的:)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口测试流程及测试点!

一、什么时候开展接口测试 1.项目处于开发阶段,前后端联调接口是否请求的通?(对应数据库增删改查)--开发自测 2.有接口需求文档,开发已完成联调(可以转测),功能测试展开之前 3.专…

PHP 面向对象编程(OOP)入门指南

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,通过使用对象来设计和组织代码。PHP作为一种广泛使用的服务器端脚本语言,支持面向对象编程。本文将介绍PHP面向对象编程的基本概念和用法&#xff0…

2.3.2 主程序和外部IO交互 (文件映射方式)----IO Client实现

2.3.2 主程序和外部IO交互 (文件映射方式)----IO Client C实现 和IOServer主要差别: 1 使用Open_Client 连接 2 一定要先打开IOServer,再打开IO_Client 效果显示 1 C 代码实现 1.1 shareddataClient.h 头文件中引用 和sharedd…

手写starter写核心

文章目录 使用cn.smart 不能使用com 避免在yml配置的时候 开启或者 写万能接口实现调整日志级别写了core核心 但是没有引入其他功能组件,就是注解可以使用但是功能没有增,所以core的作用就是写入注解从新写starter 第一步提取注解 写到核心包里面,看其他包 新建模块 使用cn.s…

开源发布Whistle: 基于弱音素监督推进数据高效多语言和跨语言语音识别

论文地址:https://arxiv.org/abs/2406.02166 开源代码及模型: https://github.com/thu-spmi/CAT/blob/master/egs/cv-lang10/readme.md 摘 要 Whistle和Whisper一样,均采用弱监督方式训练ASR基座模型。不同于Whisper采用基于子词&#xff0…

1、项目基础

1、系统架构图 2、项目业务组成 3、技术选型 3.1 前端 vue3 ts sass axios 3.2后端 spring-cloud系列 gateway openfeign spring-cloud-alibaba系列 nacos sentinel seata

基于矩阵分解算法的评分预测实现---信息检索课设以及所涉及的深度学习原理

一、实验环境 Windows,Python 3 Python作为主要编程语言,使用Python的Pandas、NumPy、Matplotlib等库 二、实验内容 主要任务 查阅相关资料,了解矩阵分解算法的基本概念、应用场景及其难点。重点了解SVD(Singular Value Decomposition,奇异值分解)系列方法。掌握Pyth…

windows@无密码的本地用户账户相关问题@仅用用户名免密登录远程桌面登录和控制@无密码用户访问共享文件夹以及挂载问题

文章目录 abstract此用户无法登录账户被禁用问题访问共享文件夹时带上凭据错误案例和解决 两类登录方式控制台登录与远程登录的区别为什么限制空密码账户只允许控制台登录相关安全策略如何修改该策略注意事项 启用允许被免密登录功能使用空密码进行远程桌面连接设置远程桌面链接…

硅纪元视角 | 1 分钟搞定 3D 创作,Meta 推出革命性 3D Gen AI 模型

在数字化浪潮的推动下,人工智能(AI)正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展,捕捉行业动态;提供深入的新闻解读,助您洞悉技术背后的逻辑;汇聚行业专家的见解,…

第二天:ALOAM前端讲解【第2部分】

三、scan2scan 3. 帧间匹配 特征关联与损失函数计算 (1)线特征 点到线的距离公式: d ϵ = ∣ ( X ~ ( k +

网安小贴士(2)OSI七层模型

一、前言 OSI七层模型是一种网络协议参考模型,用于描述计算机网络体系结构中的不同层次和功能。它由国际标准化组织 (ISO) 在1984年开发并发布。 二、定义 OSI七层模型,全称为开放式系统互联通信参考模型(Open Systems Interconnection Refe…

如何应对.rmallox勒索病毒:预防勒索病毒的实用技巧

导言: 在当今数字化世界中,网络安全成为了任何组织和个人都必须面对的重要挑战之一。勒索病毒(Ransomware)作为一种恶意软件类型,已经成为网络安全威胁中的重要一环。最近出现的.rmallox勒索病毒引发了广泛关注和担忧…

casefold()方法——所有大写字符转换为小写

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 casefold()方法是Python3.3版本之后引入的,其效果和lower()方法非常相似,都可以转换字符串中所有大写字符为小写。…

一篇文章用python GUI构建学生管理系统

引言 通过使用Python,我们可以利用其简洁和功能强大的特性,结合Tkinter提供的GUI开发能力,快速构建一个直观且易于使用的学生管理系统。 准备工作 在开始之前,确保你的开发环境中已经安装了 PythonTkinter库 安装完成后&…

Qt:5.QWidget属性介绍(Enabled属性-控件可用性设置、geometry属性-控件位置/大小设置)

目录 一、 QWidget属性的介绍: 二、Enabled属性-控件可用性设置: 2.1Enabled属性的介绍: 2.2获取控件当前可用状态的api——isEnabled(): 2.3设置控件当前的可用状态的api—— setEnabled() : 2.4 实例&#xff…

Rhino 犀牛三维建模工具下载安装,Rhino适用于机械设计广泛领域

Rhinoceros,这款软件小巧而强大,无论是机械设计、科学工业还是三维动画等多元化领域,它都能展现出其惊人的建模能力。 Rhinoceros所包含的NURBS建模功能,堪称业界翘楚。NURBS,即非均匀有理B样条,是计算机图…

昇思25天学习打卡营第6天|数据变换 Transforms

学习目标:熟练掌握数据变换操作 熟悉mindspore.dataset.transforms接口 实践掌握常用变换 昇思大模型平台学习心得记录: 一、关于mindspore.dataset.transforms 1.1 变换 mindspore.dataset.transforms.Compose将多个数据增强操作组合使用。 mindspo…

最靓丽的C++开源通知弹框SnoreToasts自动监听软件及网页通知

SnoreToasts,作为一款轻量级的C开源项目,为开发者提供了一个便捷的方式来在Windows操作系统上展示通知弹框(Toast Notifications)。 特点与优势 轻量级:SnoreToasts采用了简洁的代码设计,避免了不必要的依…

Zabbix 配置端口监控

Zabbix 端口监控简介 在Zabbix中配置端口监控,可以帮助你实时监控服务器或网络设备上的特定端口是否开放和可访问。Zabbix提供了多种方式来监控端口,主要包括简单的端口可用性检查和更复杂的服务监控。 在Zabbix中进行端口监控时,不一定需要…

AI赋能视创云展元宇宙展厅,打造沉浸式智能观展体验!

在AI人工智能迅猛发展的背景下,视创云展将元宇宙展厅与“AI智能助手”深度融合,这无疑是一次前瞻性的创新尝试,极大地丰富了展览展示的形式与内容,为参观者打造了一个既沉浸又智能的观展新纪元。 一、沉浸式体验 元宇宙展厅利用虚…