天气预报模块

news/2024/11/16 18:41:51/

目录

  • 步骤
    • 1. 选择 API
    • 2. 发送网络请求
    • 3. 接收网络响应获得的json并进行解析
    • 4. 天气图标的显示
  • QT 界面设计

步骤

1. 选择 API

我用的是 聚合数据 上的 “天气预报” https://www.juhe.cn/docs/api/id/73
在这里插入图片描述
选择它的原因主要是:免费数据简洁明了

2. 发送网络请求

manager = new QNetworkAccessManager(this);
QObject::connect(manager, &QNetworkAccessManager::finished, this, &WeatherWindow::replyFinished);//往天气预报 API 发出请求
manager->get(QNetworkRequest(QUrl("http://apis.juhe.cn/simpleWeather/query?city=广州&key=118d24f3f0c7b522a6142d9a0a4f01c9")));

注意:发送网络请求的网络地址开头必须是 http , 不能是 https , 否则无法获取网络响应

  • http:超文本传输协议,以明文方式发送内容,不提供任何方式的数据加密
  • https:在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密
  • 具体关于 http 和 https 的介绍可参考博客 https://www.cnblogs.com/wqhwe/p/5407468.html

3. 接收网络响应获得的json并进行解析

//处理收到的 json 数据
void WeatherWindow::replyFinished(QNetworkReply *reply)
{QString json_msg = reply->readAll();qDebug() << json_msg;//定义一个变量用于记录位置int position;weather_tmp = json_msg.split('"');//设置当天的地点、天气、温度ui->label_loca_city->setText(weather_tmp[9].toUtf8());ui->label_local_temperature->setText(weather_tmp[15].toUtf8());//将保存在本文件中的天气图标用链接显示出来ui->label_local_weather->setStyleSheet(QString("border-image: url(:/pic/%1);").arg(get_weather_pic(weather_tmp[23])));//减小 json_msg 的长度, weather_tmp 能存储的内容有限position = json_msg.indexOf("date");json_msg = json_msg.remove(0,position);weather_tmp = json_msg.split('"');ui->label1_date->setText(weather_tmp[2].toUtf8());weather_tmp[6].replace(QString("\\/"),QString("—"));ui->label1_temperature->setText(weather_tmp[6]);ui->label1_weather->setStyleSheet(QString("border-image: url(:/pic/%1);").arg(get_weather_pic(weather_tmp[10])));position = json_msg.indexOf("date",4);json_msg = json_msg.remove(0,position);weather_tmp = json_msg.split('"');ui->label2_date->setText(weather_tmp[2].toUtf8());weather_tmp[6].replace(QString("\\/"),QString("—"));ui->label2_temperature->setText(weather_tmp[6]);ui->label2_weather->setStyleSheet(QString("border-image: url(:/pic/%1);").arg(get_weather_pic(weather_tmp[10])));position = json_msg.indexOf("date",4);json_msg = json_msg.remove(0,position);weather_tmp = json_msg.split('"');ui->label3_date->setText(weather_tmp[2].toUtf8());weather_tmp[6].replace(QString("\\/"),QString("—"));ui->label3_temperature->setText(weather_tmp[6]);ui->label3_weather->setStyleSheet(QString("border-image: url(:/pic/%1);").arg(get_weather_pic(weather_tmp[10])));position = json_msg.indexOf("date",4);json_msg = json_msg.remove(0,position);weather_tmp = json_msg.split('"');ui->label4_date->setText(weather_tmp[2].toUtf8());weather_tmp[6].replace(QString("\\/"),QString("—"));ui->label4_temperature->setText(weather_tmp[6]);ui->label4_weather->setStyleSheet(QString("border-image: url(:/pic/%1);").arg(get_weather_pic(weather_tmp[10])));position = json_msg.indexOf("date",4);json_msg = json_msg.remove(0,position);weather_tmp = json_msg.split('"');ui->label5_date->setText(weather_tmp[2].toUtf8());weather_tmp[6].replace(QString("\\/"),QString("—"));ui->label5_temperature->setText(weather_tmp[6]);ui->label5_weather->setStyleSheet(QString("border-image: url(:/pic/%1);").arg(get_weather_pic(weather_tmp[10])));
}

4. 天气图标的显示

//返回天气图标的路径
QString WeatherWindow::get_weather_pic(QString name)
{if(name == "中雨")    return QString("heavy_rain.png");else if(name == "雷阵雨")  return QString("rain_thunder.png");else if(name == "中雨转雷阵雨")   return QString("rain_thunder.png");else if(name == "多云")   return QString("cloudy.png");else if(name == "晴")    return QString("sunny.png");else    return QString("unknown.png");
}

QT 界面设计

在这里插入图片描述


http://www.ppmy.cn/news/201753.html

相关文章

Python天气预报查询

功能&#xff1a; 实现城市天气预报查询&#xff0c;并提供未来四天查询 两个网站接口&#xff0c;直接返回数据&#xff0c;之后对数据进行读取和处理&#xff0c;很简单的小程序 效果图&#xff1a; 代码实现&#xff1a; import urllib.request import gzip import json…

酷睿i7 12800hx和i7 12800H区别

i7 12800H采用 14 核心 20 线程&#xff0c;应该是由 6 大核心 8 小核心组成&#xff0c;主频 2.8GHz&#xff0c;24MB 三级缓存&#xff0c;在 GeekBench 5 中单核心 1654 分&#xff0c;多核心 9618 分 笔记本cpu选i7 12800H还是i7 12800hx这些点很重要 http://www.adiannao.…

Qt 天气

写了一个简单的显示天气信息的例子。 其中涉及到http&#xff0c; xml&#xff0c; c11 天气信息是用webxml接口获取的&#xff0c;包括图片素材。 通过getSupportProvince获取支持的省份信息&#xff0c;getSupportCity获取当前省份中的城市&#xff0c;getWeatherbyCityNam…

网易(weather)天气预报接口

请求链接&#xff1a; http://weather.mail.163.com/weather/xhr/weather/info.do?sid&uid&host&verjs6&fontfaceyahei&style1&skinseablue&color&city101100410&callback00 参数&#xff1a; city 城市编号 返回结果&#xff1a; {&qu…

【空间天气】空间天气预报

文章目录 1.预报要素与时效2.太阳活动预报3.行星际天气预报4.磁层天气预报5.电离层天气预报6.中高层大气天气预报7.预报方法和预报检验8.空间天气机构和预报能力9.目前的主要预报业务模式9.目前的主要预报业务模式 1.预报要素与时效 空间天气预报水平主要取决于空间天气监测能力…

利用 Python 得到未来七天天气预报

因为自己平时都不看手机上的天气 app&#xff0c;因此都是出门之后“冷暖自知”&#xff0c;而在秦皇岛晚上总是会被冻得瑟瑟发抖&#xff0c;因此想写一个小脚本可以查询未来几天的天气&#xff0c;让自己选择合适的衣服。 经过查询&#xff0c;选择中国天气网 &#xff0c;里…

【读书笔记】《平凡的世界》- 路遥

他又进一步想&#xff0c;郝红梅抛开他而和顾养民相好&#xff0c;也完全是正常的啊&#xff01;他自己在哪方面都无法和顾养民比较。男女相好&#xff0c;这是两厢情愿的事&#xff0c;而怎能像乡俗话说的“剃头担子一头热”呢&#xff1f; 青春激流打起的第一个浪头在内心渐渐…

和风天气获取天气情况

和风天气api&#xff08;实时天气&#xff09;https://dev.qweather.com/docs/api/weather/weather-now/ 控制台 https://console.qweather.com/#/apps 1. 进入控制台获取key 应用管理-> 创建应用 2. 调用接口获取天气api 参数 1.key &#xff08;必选&#xff09; …