/*
* 天气获取类
*/
#include "weather.h"
Weather::Weather(QObject *parent) : QObject(parent)
{
manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));//关联信号和槽
}
Weather::Weather(QString cityName)
{
manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));//关联信号和槽
this->cityName=cityName;
refresh();
}
void Weather::setCityName(QString cityName)
{
this->cityName=cityName;
}
QString Weather::getCityName()
{
return this->cityName;
}
/*
* 获取当前日期
*/
QString Weather::getDate()
{
return this->date;
}
QString Weather::getFengLi()
{
return this->fengli;
}
QString Weather::getWenDu()
{
return this->wendu;
}
QString Weather::getTianQiType()
{
return this->weather_type;
}
QString Weather::getCurrentWendu()
{
return this->currentwendu;
}
QString Weather::getGanMaoInfo()
{
return this->ganmao;
}
QString Weather::getAllInfo()
{
return this->allinfo;
}
bool Weather::isGetDataSuccessd()
{
return this->isGetData;
}
/*
* 刷新天气
*/
void Weather::refresh()
{
this->currentwendu.clear();
this->wendu.clear();
this->ganmao.clear();
this->fengli.clear();
this->weather_type.clear();
this->allinfo.clear();
queryWeather();
dataMap.clear();//刷新的清空,待获取时在加载
}
QMap<QString, QMap<QString, QString> > Weather::getDataMap(bool *ok)
{
bool Oktemp;
if(ok==nullptr)
ok=&Oktemp;
if(!this->dataMap.isEmpty())
{
*ok=true;
return this->dataMap;
}
*ok=false;
if(!this->isGetData)
return this->dataMap;
QJsonParseError err;
QJsonDocument json_recv = QJsonDocument::fromJson(allinfo.toUtf8(),&err);//解析json对象
qDebug() <<"Json-Error:"<< err.error;
if(!json_recv.isNull())
{
QJsonObject object = json_recv.object();
if(object.contains("data"))
{
QJsonValue value = object.value("data"); // 获取指定 key 对应的 value
if(value.isObject())
{
QJsonObject object_data = value.toObject();
if(object_data.contains("yesterday")&&object_data.contains("forecast"))//若存在昨天及预测天气则加载所有数据
{
QJsonValue value=object_data.value("yesterday");
if(value.isObject())
{
QMap<QString,QString>mapvalue;
mapvalue["high"]=value.toObject().value("high").toString();
mapvalue["low"]=value.toObject().value("low").toString();
mapvalue["fengxiang"]=value.toObject().value("fx").toString();
mapvalue["fengli"]=value.toObject().value("fl").toString();
mapvalue["type"]=value.toObject().value("type").toString();
dataMap[value.toObject().value("date").toString()]=mapvalue;
}
value = object_data.value("forecast");
if(value.isArray())
{
QJsonArray valueArray=value.toArray();
qDebug()<<"WeatherData count:"<<valueArray.count();
for(int i=0;i<valueArray.count();i++)
{
QJsonObject object = valueArray.at(i).toObject();
QMap<QString,QString>mapvalue;
mapvalue["high"]=object.value("high").toString();
mapvalue["low"]=object.value("low").toString();
mapvalue["fengxiang"]=object.value("fengxiang").toString();
mapvalue["fengli"]=object.value("fengli").toString();
mapvalue["type"]=object.value("type").toString();
dataMap[object.value("date").toString()]=mapvalue;
}
// QString low = today_weather.value("low").toString();
// QString high = today_weather.value("high").toString();
// QString strength = today_weather.value("fengli").toString();
// strength.remove(0,8);
// strength.remove(strength.length()-2,2);
/*
{
"data":
{
"yesterday":
{
"date":"17日星期六","high":"高温 32℃","fx":"北风","low":"低温 19℃","fl":"<![CDATA[3-4级]]>","type":"晴"
},
"city":"北京",
"forecast":[
{
"date":"18日星期天","high":"高温 32℃","fengli":"<![CDATA[<3级]]>","low":"低温 21℃","fengxiang":"北风","type":"晴"
},
{
"date":"19日星期一","high":"高温 31℃","fengli":"<![CDATA[<3级]]>","low":"低温 22℃","fengxiang":"南风","type":"多云"
},
{
"date":"20日星期二","high":"高温 25℃","fengli":"<![CDATA[<3级]]>","low":"低温 20℃","fengxiang":"南风","type":"小雨"
},
{
"date":"21日星期三","high":"高温 31℃","fengli":"<![CDATA[<3级]]>","low":"低温 21℃","fengxiang":"北风","type":"多云"
},
{
"date":"22日星期四","high":"高温 30℃","fengli":"<![CDATA[<3级]]>","low":"低温 22℃","fengxiang":"北风","type":"晴"
}
],
"ganmao":"各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。",
"wendu":"24"
},
"status":1000,
"desc":"OK"
}
*/
qDebug()<<QString::fromLocal8Bit("获取天气成功");
*ok=true;
return dataMap;
}
}
}
}
}else
{
qDebug()<<"json_recv is NULL or is not a object !!";
}
return dataMap;
}
/*
* qDebug打印Map数据
*/
void Weather::print_Debug_allinfoMap()
{
getDataMap();
qDebug()<<endl;
qDebug()<<"city:"<<this->cityName;
qDebug()<<"wendu:"<<this->wendu;
qDebug()<<"currentwendu:"<<this->currentwendu;
qDebug()<<"fengli:"<<this->fengli;
qDebug()<<"weather_type:"<<this->weather_type;
qDebug()<<"ganmao:"<<this->ganmao;
QString str;
foreach (QString key, dataMap.keys()) {
str="date"+key+"[";
foreach (QString key1, dataMap.value(key).keys()) {
// qDebug()<<key1<<dataMap.value(key).value(key1);
str+=key1+':'+dataMap.value(key).value(key1)+' ';
}
str+=']';
qDebug()<<str;
}
dataMap.clear();
}
void Weather::replyFinished(QNetworkReply *reply)
{
this->i
天气预报的release程序以及天气代码
版权申诉
97 浏览量
2022-06-13
16:44:01
上传
评论
收藏 19.09MB ZIP 举报
处处清欢
- 粉丝: 150
- 资源: 2471
最新资源
- 基于matlab实现文档+程序边缘计算任务卸载与资源调度的算法,是论文的源代码,具有价值.rar
- 什么是学生成绩管理系统c++以及学习学生成绩管理系统的意义
- 什么是词向量-以及学习关于了解词向量的意义
- 什么是mybatis动态sql以及学习mybatis动态sql的意义
- 华为数据治理方法论,包括:数据治理框架、数据治理组织架构、数据治理度量评估体系以及华为数据治理案例分享
- 基于matlab实现对表面肌电信号进行归一化处理,并对归一化后的图形显示 .rar
- 基于matlab实现单级倒立摆的 T-S 模型 包括 LMI 程序源码
- 图书管理系统(struts+hibernate+spring+ext).rar
- 基于matlab实现此压缩包包含语音信号处理中的语音变声代码加音频.rar
- STM32使用PWM驱动舵机并通过OLED显示
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈