Qt项目天气预报(6) - 引入QMap: debug+更新天气图片

city.json 城市区域数据 [{ "label": "北京市", "value": "110000", "children": [{ "label": "市辖区", "value": "110100", "children": [{ "label": "东城区", "value": "110101" }, { "label": "西城区", "value": "110102" }, { "label": "朝阳区", "value": "110105" }, . 阅读详情


QMAP  解决bug ()

bug描述

由于json文件中有的地方不带市,有的地方带县,有的地方是区,我们匹配不上这个地方,我们可以使用QString进行字符串拼接来实现。

另外,我们之前的 getCityCodeFromName()函数写得不够灵活,我们可以自定义一个类 CityCodeUtils来实现,使用QMap来存放 city_name  和 city_id 的键值对,让我们匹配的时候更快,没必要遍历寻找,大大提升效率。

cityCodeUtils.h

#ifndef CITYCODEUTILS_H
#define CITYCODEUTILS_H

#include <QMap>



class CityCodeUtils
{
public:
    CityCodeUtils();

    QMap<QString,QString> cityMap={};
    QString getCityCodeFromName(QString cityName);

    void initCityMap();


};

#endif // CITYCODEUTILS_H

cityCodeUtils.cpp
 

#include "citycodeutils.h"

#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>

CityCodeUtils::CityCodeUtils()
{

}

//初始化QMap 并寻找城市名
QString CityCodeUtils::getCityCodeFromName(QString cityName)
{

    if(cityMap.isEmpty()){ // 这个map为空就初始化
    initCityMap(); // 初始化QMap,把json文件内容中的city_name city_code-以键值对的形式添加到QMap对象cityMao中
    }
    //根据城市名寻找对应的QMap对象
    QMap<QString, QString>::iterator it = cityMap.find(cityName);
    if(it == cityMap.end()){
        it=cityMap.find(cityName+"市");
    if(it == cityMap.end())
          it=cityMap.find(cityName+"县");
    if(it == cityMap.end())
          it=cityMap.find(cityName+"区");
      if(it == cityMap.end())
        return ""; // 四种判断都找不到就返回"" --> 会给出对应QMessageBox的报错
    }

   return it.value();
}

// 初始化QMap,把json文件内容中的city_name city_code-以键值对的形式添加到QMap对象cityMao中
void CityCodeUtils::initCityMap()
{
    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();
                QString cityCode = value["city_code"].toString();
                //添加到QMap对象中进行初始化
                cityMap.insert(cityName,cityCode);
            }

        }

    }
}

效果演示


更新天气图片

QMap链接上天气和图片


先在构造函数中添加下面内容,链接上对应天气和图片(具体可以根据自己的图片路径修改)
=============================   

// 根据天气插入对应图标
    //根据keys,设置icon的路径

    mTypeMap.insert("暴雪",":/type/BaoXue.png");
    mTypeMap.insert("暴雨",":/type/BaoYu. png");
    mTypeMap.insert("暴雨到大暴雨",":/type/BaoYuDaoDaBaoYu.png");
    mTypeMap.insert("大暴雨",":/type/DaBaoYu.png");
    mTypeMap.insert("大暴雨到特大暴雨",":/type/DaBaoYuDaoTeDaBaoYu.png");
    mTypeMap.insert("大到暴雪",":/type/DaDaoBaoXue.png");
    mTypeMap.insert("大雪",":/type/DaXue.png");
    mTypeMap.insert("大雨",":/type/DaYu.png");
    mTypeMap.insert("冻雨",":/type/DongYu.png");
    mTypeMap.insert("多云",":/type/DuoYun.png");
    mTypeMap.insert("浮沉",":/type/FuChen.png");
    mTypeMap.insert("雷阵雨",":/type/LeiZhenYu.png");
    mTypeMap.insert("雷阵雨伴有冰雹",":/type/LeiZhenYuBanYouBingBao.png");
    mTypeMap.insert("霾",":/type/Mai.png");
    mTypeMap.insert("强沙尘暴",":/type/QiangShaChenBao.png");
    mTypeMap.insert("晴",":/type/Qing.png");
    mTypeMap.insert("沙尘暴",":/type/ShaChenBao.png");
    mTypeMap.insert("特大暴雨",":/type/TeDaBaoYu.png");
    mTypeMap.insert("undefined",":/type/undefined.png");
    mTypeMap.insert("雾",":/type/Wu.png");
    mTypeMap.insert("小到中雪",":/type/XiaoDaoZhongXue.png");
    mTypeMap.insert("小到中雨",":/type/XiaoDaoZhongYu.png");
    mTypeMap.insert("小雪",":/type/XiaoXue.png");
    mTypeMap.insert("小雨",":/type/XiaoYu.png");
    mTypeMap.insert("雪",":/type/Xue.png");
    mTypeMap.insert("扬沙",":/type/YangSha.png");
    mTypeMap.insert("阴",":/type/Yin.png");
    mTypeMap.insert("雨",":/type/Yu.png");
    mTypeMap.insert("雨夹雪",":/type/YuJiaXue.png");
    mTypeMap.insert("阵雪",":/type/ZhenXue.png");
    mTypeMap.insert("阵雨",":/type/ZhenYu.png");
    mTypeMap.insert("中到大雪",":/type/ZhongDaoDaXue.png");
    mTypeMap.insert("中到大雨",":/type/ZhongDaoDaYu.png");
    mTypeMap.insert("中雪",":/type/ZhongXue.png");
    mTypeMap.insert("中雨",":/type/ZhongYu.png");

===========================================
然后在 中加入 parseWeatherJsonData() 函数中

  ui->labelWeatherIcon->setPixmap(mTypeMap[objRoot["wea"].toString()]);

  // 根据键值对匹配对应图片

如下图

效果演示

如下图,不同城市的不同天气就行了一波对应图片的更新

QT STL容器QMap【增、删(两种方式)、改、查、遍历(三种方式)、清除】 QMap 【1】UI按钮 【2】UI按钮槽函数 【3】Qmap 输出结果 阅读详情

相关推荐

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

我们使用如下api接入,当然需要自己去注册后生成自己的对应id才可以使用//专业天气v61。

mx_jun的博客 1356

QMap

QMap是一个以升序键顺序存储键值对的数据结构 --QMap原型为 class QMap< K,T> 模板 --QMap中的键值对根据Key进行了排序 --QMap中的Key类型必须重载 operator< QMap使用时的注意事项 --通过Key获取Value时: 当Key存在:返回对应的Value 当Key不存在:返回值类型所对应的...

qq_36147009的博客 1125

citycode.json

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

省市区编码JSON数据

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

...... 2459

json中国城市代码

json中国城市代码

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

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

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

城市代码:http://blog.csdn.net/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

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3013

自举电容的工作原理-3句话总结

1、一道面试题 照例,先抛出来一道面试题:“Buck电路的SW引脚通常会放置一颗小电容,这颗电容有什么用?”。这个问题问得比较细,非常考验被面试者的硬件基本功。 2、似懂非懂的答案 有小伙伴可能不太清楚这颗电容的作用,回答不上来。也有小伙伴脱口而出:自举电容,用来做升压的。但后面好像说不出来具体逻辑。 没具体了解过,答不上来,也没啥可惜的。但是了解过一点,但又似懂非懂的这种,给出的答案只是轻轻点水或者千篇一律,那无疑是错过了一个加分项。 3、异步Buck的自举环路组成 既然是针对Buck电路讲自举电容,前面

ltqdxl的博客 3万+

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

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

Leo_pzz的博客 957

疾风气象大模型4.0白皮书

《疾风气象大模型白皮书摘要》 疾风气象大模型(J-AFM)是国内首个基于3D建模的气象智能平台,突破传统二维气象分析的局限,采用体素化技术构建"x-y-z-t"四维统一模型,实现从分钟级短临到30天跨时效的连续预测。核心技术包括:1)多源数据三维同化,融合雷达、卫星、风廓线等异构数据;2)物理约束AI解码器,嵌入能量守恒、湍流封闭等气象原理;3)行业适配插件,服务风电、光伏、航空等领域,如山地风场尾流校正、云影短临预测。平台支持批流一体推理与边缘部署,提供概率化输出和误差溯源能力,显著降

专注AI大模型,软件混淆,授权 542

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

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

qq_32154641的博客 2361

GD32F4xx MCU ADC+DMA 多通道采样

1、GD32F4xx ADC GD32F4xx 的12位ADC是一种采用逐次逼近方式的模拟数字转换器。 1.1 主要特征 可配置12位、10位、8位、6位分辨率; ADC采样率:12位分辨率为2.6MSPs,10位分辨率为3.0 MSPs。分辨率越低,转换越快; PS: MSPs (模拟混合信号转换速率),是指完成1次从模拟转换到数字的AD转换所需的时间的倒数。常用单位是ksps和Msps,表示每秒采样(千)/(百万)次(kilo / Million Samples per Second)。 1msps

madao1234的博客 8117

Nmap源码分析(端口扫描)

端口扫描是Nmap的核心功能,用于确定目标机的端口状态(开放、关闭、过滤等),也为Nmap的服务与版本扫描、OS扫描、脚本扫描提供基本的指引信息。所以,深入理解端口扫描的实现对分析其他的扫描方式很有帮助。 1简单回顾   首先简要回顾一下端口扫描的原理以及命令行选项。 1.1扫描原理   Nmap提供的10多种类型的端口扫描方法,如TCP SYN/ACK/FIN/Xmas/NULL/ Windows/Connect,FTP Bounce, Idle scan, UDP port u...

墨痕诉清风的博客 1597

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

export default [ { ‘cityCode’: ‘110000’, ‘cityName’: ‘北京市’ }, { ‘cityCode’: ‘110100’, ‘cityName’: ‘北京市’ }, { ‘cityCode’: ‘110101’, ‘cityName’: ‘东城区’ }, { ‘cityCode’: ‘110102’, ‘cityName’: ‘西城区’ }, { ‘cityCode’: ‘110105’, ‘cityName’: ‘朝阳区’ }, { ‘cityCode’:

qq_32154641的博客 2670

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计(CVPR2021)

YOLOv5改进 | 多尺度特征提取 | 结合多样分支块及融合的高级设计(CVPR2021)

qq_44224801的博客 2068

天气预报城市代码对应表

天气预报城市代码对应表 { code: 101010100, area: '北京', city: '北京', province: '北京' }, { code: 101010200, area: '海淀', city: '北京', province: '北京' }, { code: 101010300, area: '朝阳', city: '北京', province: '北京' }, { code: 101010400, area: '顺义', city: '北京', prov

少年一贯快马扬帆,道阻且长不转弯; 要盛大,要绚烂,要哗然; 要用理想的泰坦尼克,去撞现实的冰川; 要当烧赤壁的风,而非借鉴草船; 要为了一片海,就肯翻万山。 9136

基于STM32设计的电能质量控制系统_353

本项目基于STM32F103RCT6微控制器设计了一套电能质量控制系统,实现了对火焰、烟雾、环境温湿度、电压、电流及功率等多项参数的实时监测与报警。系统通过MQ2烟雾传感器、火焰传感器、SHT30温湿度传感器及电力参数采集模块采集数据,采用高电平触发有源蜂鸣器进行异常报警。采集的数据通过ESP8266无线模块以AP+TCP模式上传至基于Qt开发的手机APP和电脑上位机,实现远程实时监控和历史数据管理。系统配备1.44寸LCD显示屏,实现本地数据显示。软件采用Keil5开发,采用寄存器编程方式,提高系统响应速

253

注意力机制模块:二次创新:CBAM 与 ECA 融合形成 CECA 模块,参数量减少 40%

文章摘要: 本文提出一种轻量化注意力模块CECA,通过融合CBAM和ECA的优势解决模型部署中的精度与速度矛盾。CBAM虽具备通道和空间双重注意力,但参数量大;ECA轻量但缺乏空间注意力。CECA采用ECA的一维卷积替换CBAM的通道注意力部分,保留其空间注意力模块,在保持双注意力能力的同时减少40%参数量。实验表明该方案在边缘设备部署中能维持精度并提升推理速度,特别适用于YOLO等目标检测模型的轻量化改进。文章详细拆解了架构设计、代码实现及参数量优化原理,为算法工程师和嵌入式开发者提供了实用解决方案。

ZXSXJ的博客 237

中国地区+code.json文件

地区+code 前端必收藏的json文件

m0_62359005的博客 1937

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

基于Qt的天气预报

基于Qt的天气预报

qq_51762652的博客 858

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

城市编码映射json格式

{ "石家庄市": { "city_code": "130100", "province": "河北省" }, "唐山市": { "city_code": "130200", "province": "河北省" }, "秦皇岛市": { "city_code": "130300"...

eyses__的博客 1651

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

中国天气网天气预报API接口城市代码(XML格式,信息全)

说到开发天气预报,就需要找一个开放接口了,接口有很多,中国天气网的数据比较准确,而且也有权威性。访问地址如:http://m.weather.com.cn/data/101010100.html,这是北京的天气URL,其中101010100就是城市代码了,比如西安的天气URL为:http://m.weather.com.cn/data/101110101.html,那么现在主要的任务就是怎样获取这

ljheee的博客 3万+

对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析

本文详细介绍了Qt中的QTableWidget控件和QTableWidgetItem类,它们是处理二维表格数据的核心组件。主要内容包括: QTableWidgetItem类详解: 核心方法:row()/column()获取位置,setText()/text()设置文本,setIcon()设置图标 样式控制:setTextAlignment()对齐方式,setFont()字体,setSizeHint()尺寸 QTableWidget核心操作: 单元格管理:item()获取单元格,setItem()设置单元格

2503_92929084的博客 106
上一篇: Qt项目天气预报(5) - 根据JSON刷新天气信息+城市匹配
下一篇: Qt项目天气预报(7) - 更新一周天气(数据和图像)
mx_jun
博客等级 码龄5年 1605粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值