Qt项目天气预报(5) - 根据JSON刷新天气信息+城市匹配

刷新当天天气

我们使用如下api接入,当然需要自己去 易客云天气API免费天气API接口|天气预报接口|全球天气API接口|气象预警|空气质量 (tianqiapi.com)注册后生成自己的对应id才可以使用

//专业天气v61
http://v1.yiketianqi.com/api?unescape=1&version=v61&appid=65521391&appsecret=Dv2eKMLL


======================================================================

参考解析的json文件


解析获取到的json数据 - parseWeatherJsonData

void Widget::parseWeatherJsonData(QByteArray rawData)
{
    QJsonDocument jsonObj = QJsonDocument::fromJson(rawData); // 先把原始数据转为JSON类型

    if(!jsonObj.isNull() && jsonObj.isObject()){ // jsonObj不为空,并且是Obeject类型
     QJsonObject objRoot = jsonObj.object();
     //解析我们获得的json数据, 填入到相关 控件中

     //解析日期
     QString date = objRoot["date"].toString();
     QString week = objRoot["week"].toString();
     ui->labelCurrentData->setText(date + " " + week); // 把读取到的日期和星期加入到右上角的控件  labelCurrentData 中

     //解析城市名称
     QString cityName =objRoot["city"].toString();
     ui->labelCity->setText(cityName+"市");

     //解析当前温度
     QString curTem = objRoot["tem"].toString();
     ui->labelTemp->setText(curTem+"℃"); // 显示当前温度
     QString lowTem = objRoot["tem2"].toString();
     QString highTem = objRoot["tem1"].toString();
     ui->labelTempRange->setText(lowTem + "~" +highTem +"℃"); // 显示温度范围

     //解析天气类型
     ui->labelWeatherType->setText(objRoot["wea"].toString());

     //解析感冒指数
     ui->labelGanMao->setText(objRoot["air_tips"].toString());


     //解析风向
     ui->labelFengXiang->setText(objRoot["win"].toString()); //风向
     ui->labelFengXiangData->setText(objRoot["win_speed"].toString());//风力

     //解析PM2.5
     ui->labelPM25Data ->setText(objRoot["air_pm25"].toString());
     //湿度
     ui->labelShiDuData->setText(objRoot["humidity"].toString());
     //空气质量
     ui->labelAriData->setText(objRoot["air_level"].toString());
    }
}

在readHttpReply() 里面添加

效果演示


 

支持不同城市的天气预报


绑定信号与槽;

在构造函数中绑定信号与槽

    //由QNetworkAccessManager 发起request请求:
    //实例化network对象
    manager = new QNetworkAccessManager(this);
    connect(manager, &QNetworkAccessManager::finished,[](){
        qDebug()<<"manager Finnish!";
    });

  urlyiKe ="http://v1.yiketianqi.com/api?unescape=1&version=v61&appid=65521391&appsecret=Dv2eKMLL";

    QUrl urlTianQi(urlyiKe);

    //QNetworkRequest - 指定请求的url地址
    QNetworkRequest res(urlTianQi); //根据网址实例化QUrl对象,再根据这个对象实例化  QNetworkRequest对象
    reply = manager->get(res);
    //QNetworkReply网络请求后进行信号读取
    connect(manager,&QNetworkAccessManager::finished,this,&Widget::readHttpReply);

每个城市id的json文件在资源里

检索json文件,寻找我们需要城市id - getCityCodeFromName

// 打开我们配置的json文件,找到对应城市id
QString getCityCodeFromName(QString name)
{
    QFile file(":/citycode.json");
    file.open(QIODevice::ReadOnly);
    QByteArray rawData = file.readAll();
    file.close();
    QJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);

    if(jsonDoc.isArray()){
        QJsonArray citys = jsonDoc.array();
        for(QJsonValue value:citys){
            if(value.isObject()){
                QString cityName = value["city_name"].toString();
                if(cityName == name){
                 return value["city_code"].toString(); //能找到返回名字
                }

            }

        }
        return ""; //找不到,返回空

    }

}


 

 on_pushButton_clicked(搜索槽函数)

//根据用户输入城市名字获取数据 
void Widget::on_pushButton_clicked()
{
    QString cityNameFromUser = ui->lineEditCity->text();
    QString cityCode = getCityCodeFromName(cityNameFromUser);
    if(cityCode != ""){ // 能匹配到根据城市id 匹配 url
        urlyiKe += "&cityid=" +cityCode;
        qDebug()<<urlyiKe;
        manager->get(QNetworkRequest(QUrl(urlyiKe)));
    }
    else{ // 没找到

        QMessageBox msg;
        msg.setWindowTitle("错误");
        msg.setText("请输入正确的城市名称!");
        msg.setStyleSheet("QPushButton{color:red};");//设置按钮样式
        msg.setStandardButtons(QMessageBox::Ok); //添加Ok按钮
        msg.exec();// 调用QMessageBox对象
    }

}

效果演示

// 根据不同城市给出不同的天气情况



 

【QT学习笔记】基于QT的天气预报 【QT学习笔记】基于QT的天气预报前言那就开始吧!先看一下效果颜面最重要,画个UI构造实现怎么开始?开始解析数据关于城市切换ok感谢 前言 学习qt已经有一段时间了,做的都是一些单机类的小软件。突然有了兴致,做了这个能联网的软件,天气预报软件。 网络上有很多免费的天气api,有 xml 格式,也有 json 格式的。具体 xml 和 json 有什么区别,这里不做解释,本文所使用天气接口返回的是 ... 阅读详情

相关推荐

QT C++图形界面开发入门:从环境搭建到项目实战全解析

C++作为一门强大的面向对象编程语言,在系统级开发和性能关键场景中广泛应用。其核心机制如类、继承、多态等为构建复杂软件提供了坚实基础。在桌面应用开发领域,图形用户界面(GUI)是连接用户与程序功能的重要桥梁。QT框架作为跨平台的C++ GUI开发工具,通过其独特的信号与槽机制实现了对象间的松耦合通信,极大地简化了事件驱动编程。这一技术价值在于,它让开发者能够高效构建可在Windows、Linux、macOS等多个操作系统上运行的桌面应用程序,提升了代码复用率和开发效率。其应用场景广泛,涵盖从简单的工具软件到

weixin_34209851的博客 391

免费获取天气预报的API接口(Json格式)

当需要获取某个城市天气数据json时候,需要传入一个城市代码编码作为入参,地址: [http://t.weather.itboy.net/api/weather/city/](http://t.weather.itboy.net/api/weather/city/)xxxxx ,其中xxxxx即为城市代码。

Roc的博客 4万+

免费的天气预报接口

免费的天气预报接口

github_34572149的博客 3059

实验项目:解析JSON数据实现天气预报显示

实验目的: 理解JSON数据的基本结构 掌握使用Gson解析JSON数据的方法 实验内容:使用解析JSON文件获取天气预报信息,并将不同城市的天气信息显示在主界面中,应用程序运行时界面如图1所示。单击其他城市按钮时,将显示相应城市对应的天气信息,如图2所示。 图1 程序运行初始界面 图2 切换城市天气显示界面 实验步骤: TestServer服务器端,在WebRoot文件夹下新建weather.json文件,使其包含三个城市的天气信息,每一...

qq_47112287的博客 6683

【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营06

13 | 司法诉讼 | 原告律师 | 争取和解优势 | 证据披露的序贯博弈 | 策略性证据释放 | 持有证据集E = {强证据e_s, 中证据e_m, 弱证据e_w}。设公众原有认知人格向量为 Pold​​=(p1​,p2​,...,pk​), 其中p_i为负面特质(如“不敬业”)。危机后, 通过行为序列 {At​}和宣传, 将公众认知向新向量 Pnew​​引导, 使得在关键维度上, Pnew​​与 Pold​​的余弦相似度降低, 并与一个正面的、可接受的“原型”(如“浪子回头”、“慈父”)对齐。

weixin_49199313的博客 1482

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计01 基础知识

CPU:拥有 L1/L2/L3 多级缓存,用于暂存即将执行的指令和频繁访问的数据。GPU:包含显存、纹理缓存、常量缓存、指令缓存等,加速图形渲染和通用计算。RAID 卡 / 存储控制器:自带缓存(通常带电池保护),用于合并写操作、加速读写。打印机:内置内存缓存,用于暂存待打印的页面数据,避免反复从电脑传输。光驱 / 蓝光播放器:内部缓存用于平滑读取光盘数据,防止因寻道延迟导致卡顿。操作系统:页缓存(Page Cache):缓存文件系统数据,减少磁盘 I/O。目录缓存(dentry cache):加速路径查找

weixin_49199313的博客 290

省市区编码JSON数据

【代码】省市区编码JSON数据。

...... 2459

基于Qt与QListWidget的天气预报系统开发:从界面布局到异步网络请求全解析

桌面应用开发中,列表选择与详情展示是极为常见的交互范式。Qt框架提供的QListWidget控件,凭借其内置的Item数据绑定和信号槽机制,成为轻量级主从界面设计的理想选择。通过城市列表与天气详情的联动,开发者可以快速掌握窗口布局、控件交互、异步网络请求与JSON解析等核心技能。天气预报系统作为典型的工程实践项目,将C++面向对象思想与Qt事件循环深度结合:用户操作触发网络请求,数据返回后经QJsonDocument解析,再刷新界面显示关键气象信息。从城市管理、数据持久化到防御式容错处理,这类项目完整覆盖了

weixin_29611239的博客 230

基于IMX6ull的车载系统

本文介绍了一个基于NXP i.MX6ULL处理器的智能车载信息系统设计。系统采用嵌入式Linux平台,集成了多媒体播放、GPS导航、倒车影像、环境监测等核心功能。硬件平台使用正点原子开发板,软件架构基于Qt框架,采用模块化分层设计。重点阐述了天气预报模块的实现,包括UI设计、HTTP网络请求和JSON数据解析流程。系统通过侧边栏导航和堆栈式页面布局,提供直观友好的交互体验,为智能座舱开发提供了实践参考。

m0_68214818的博客 1118

citycode.json

全国市区code,名称,json数据下载。

json中国城市代码

json中国城市代码

中国天气网城市代码(JSON)获取实现(一)

城市代码:http://blog.youkuaiyun.com/huoer_12/article/details/17357281 这篇文章中贴出china的所有城市及其具体的管辖范围及所属情况,可复制保存为city.json文件。 下面将来对城市代码的JSON文件进行获取与查询: 获取主类:CityCode.java package com.eabour.weather; import java.

huoer_12的专栏 3569

city.json.

用json写的中国城市代码

全国城市信息 json文件

全国城市json数据

qq_47255575的博客 2315

city.json(全国城市 省市区)

全国城市 省市区 示例 "cities": [ { "areaId": "110000", "areaName": "北京市", "counties": [ { "areaId": "110101", "areaName": "东城区" }, { "areaId": "110102", "areaName": "西城区" }, { "areaId": "110105", "areaName": "朝阳区" }, { "areaId": "110106", "areaName": "丰台区" }, {

实战指南:从零搭建ROS2 + Cartographer 2D激光SLAM系统

本文详细介绍了如何从零开始搭建ROS2与Cartographer结合的2D激光SLAM系统,涵盖环境准备、激光雷达驱动配置、Cartographer安装与参数调优等关键步骤。通过实战案例和常见问题解决方案,帮助开发者快速掌握激光雷达建图技术,提升机器人自主导航能力。

weixin_29062255的博客 403

全国行政区划代码(json对象)---包含键值对的城市代号和城市名称的json对象代码(不包括县级市)

export default [{ ‘cityCode’: ‘110100’, ‘cityName’: ‘北京’ }, { ‘cityCode’: ‘120100’, ‘cityName’: ‘天津’ }, { ‘cityCode’: ‘130100’, ‘cityName’: ‘石家庄市’ }, { ‘cityCode’: ‘130200’, ‘cityName’: ‘唐山市’ }, { ‘cityCode’: ‘130300’, ‘cityName’: ‘秦皇岛市’ }, { ‘cityCode’: ‘

qq_32154641的博客 2361

kaggle:Digit Recognizer《手写数字识别》你的第一个图像识别竞赛项目

新手,入门,巩固复习,深度学习,图像识别

qq_63591092的博客 3097

城市字母索引表(含有热门城市)json对象文件

城市字母索引表(含热门城市)json数组对象文件

Leo_pzz的博客 957

【屠龙之术】SAP 欧洲公司 高级合规性报表 FEC

所谓FEC ,其实是法国税务局要求法国的公司,每年要向税务局进行提交的税务报告,这个报告有特殊的格式,进行加密,法国公司要在收到税务局通知以后,及时进行报送,如果不报送,或者报送不合格文件,将面临5000欧的罚款。-----------------------------------------------进入正文----------------------------------------------------------------------有专门的T-code,PPT我就不贴了,我直接截图。

竹大的博客 1960

Hopf振荡器在机器人步态控制里到底怎么用?一个CPG仿生案例说清楚

本文深入解析了Hopf振荡器在机器人步态控制中的实际应用,通过CPG仿生案例详细展示了从数学方程到关节指令的完整流程。重点探讨了Hopf振荡器的极限环稳定性、参数调节技巧及自适应控制策略,为机器人运动控制提供了高效解决方案。

weixin_29284657的博客 201

国家气象局提供的天气预报接口(完整Json接口)

国家气象局提供的天气预报接口主要有三个,分别是: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinfo/101010100.html http://m.weather.com.cn/data/101010100.html 其中详细接口为:http://m.weathe...

weixin_34161064的博客 700

Xilinx HydraMini试玩教程

HydraMini是Xilinx推出的基于Pynq-Z2开发板的自动驾驶开发小车,其有着简单易学、高灵活性、高扩展性、高性能等优良特性,是研究人员和学生进入自动驾驶领域的一个平台。本教程会通过最基础的讲解和步骤带领读者熟悉这个平台的基本开发流程。

qq_25762163的博客 1773
上一篇: Qt项目天气预报(4) - json 数据解析
下一篇: Qt项目天气预报(6) - 引入QMap: debug+更新天气图片
mx_jun
博客等级 码龄5年 1605粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值