Qt 天气

news/2024/11/16 18:46:54/

写了一个简单的显示天气信息的例子。

其中涉及到http, xml, c++11

天气信息是用webxml接口获取的,包括图片素材。


通过getSupportProvince获取支持的省份信息,getSupportCity获取当前省份中的城市,getWeatherbyCityName获取城市天气

由于QNetworkAccessManager的get请求是异步的所以我们需要在收到replyFinished应答后通知界面来显示信息,

以上三个接口都有一个回调函数作为参数,此回调函数就是用来显示界面信息的地方,使用到了c++11中的function和bind。

其中replyFinished涉及到了xml解析,部分格式如下所示,具体协议可以参考:webxml

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns="http://WebXml.com.cn/"><string>string</string><string>string</string>
</ArrayOfString>

1.获取所有的省份;

2.第一个省份为默认省份,获取当前省份的城市列表;

3.点击“查询”,获取城市天气信息后解析并显示在界面上;

4.为了保证当前的城市和天气信息一致,当城市改变后要清除之前的信息。


完整代码:https://github.com/tujiaw/weather/

部分代码如下:

citymanager.h

#ifndef CITYMANAGER_H
#define CITYMANAGER_H#include <QObject>
#include <functional>class QNetworkAccessManager;
class QNetworkReply;typedef std::function<void (const QStringList &strList)> OnMessage;class CityManager : public QObject
{Q_OBJECTpublic:CityManager(QObject *parent = 0);void getSupportProvince(const OnMessage &msg);void getSupportCity(const QString &provinceName, const OnMessage &msg);void getWeatherbyCityName(const QString &cityName, const OnMessage &msg);private slots:void replyFinished(QNetworkReply *);private:QNetworkAccessManager *net_;OnMessage onMessage_;
};#endif // CITYMANAGER_H


 

citymanager.cpp

#include "citymanager.h"#include <QtNetwork>
#include <QTextCodec>
#include <QXmlStreamReader>
#include <QWaitCondition>
#include <QMutex>
#include <QMutexLocker>// 获取天气信息接口:http://www.webxml.com.cn/zh_cn/weather_icon.aspx
CityManager::CityManager(QObject *parent): QObject(parent)
{net_ = new QNetworkAccessManager(this);QObject::connect(net_, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));}void CityManager::getSupportProvince(const OnMessage &msg)
{onMessage_ = msg;QUrl url("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince?");QNetworkRequest request(url);net_->get(request);
}void CityManager::getSupportCity(const QString &provinceName, const OnMessage &msg)
{onMessage_ = msg;QString str("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=");str.append(provinceName);QUrl url(str);QNetworkRequest request(url);net_->get(request);
}void CityManager::getWeatherbyCityName(const QString &cityName, const OnMessage &msg)
{onMessage_ = msg;QString str("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=");str.append(cityName);QUrl url(str);QNetworkRequest request(url);net_->get(request);
}void CityManager::replyFinished(QNetworkReply *reply)
{QTextCodec *codec = QTextCodec::codecForName("UTF-8");QString all = codec->toUnicode(reply->readAll());QStringList list;QXmlStreamReader reader(all);while (!reader.atEnd()) {reader.readNext();if (reader.isStartElement()) {if (reader.name() == "string") {list.append(reader.readElementText());}}}if (onMessage_) {onMessage_(list);}reply->deleteLater();
}



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

相关文章

网易(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; …

GEE下载气象数据(降雨、气温、风向等)

1.数据描述 ERA5 Monthly Aggregates - Latest Climate Reanalysis Produced by ECMWF / Copernicus Climate Change ServiceERA5 is the fifth generation ECMWF atmospheric reanalysis of the global climate. Reanalysis combines model data with observations from acro…

天气预报接口(weather.com.cn)

http://weather.com.cn/data/city3jdata/china.html&#xff08;省份列表&#xff09; http://weather.com.cn/data/city3jdata/provshi/10121.html&#xff08;地区列表&#xff09; http://weather.com.cn/data/city3jdata/station/1012101.html&#xff08;县城列表&#x…

html天气预报

天气预报 天气预报 <body> <div class"top"> <div class"title_logo"></div> <p class"title">天气预报</p> <p class"current_city">当前城市&#xff1a;重庆</p> <p class&quo…