You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
6.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "weather.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QHttpPart>
#include <QHttpMultiPart>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
#include <QString>
static const QMap<QString, QString> weatherMap {
{"NA", "55"},
{"", "0"},
{"多云", "1"},
{"", "2"},
{"阵雨", "3"},
{"雷阵雨", "4"},
{"小雨", "7"},
{"中雨", "8"},
{"大雨", "9"},
{"中到大雨", "9"},
{"", "13"},
};
static const QMap<QString, QString> weatherMap_night {
{"NA", "55"},
{"", "33"},
{"多云", "41"},
{"", "35"},
{"阵雨", "47"},
{"雷阵雨", "49"},
{"小雨", "7"},
{"中雨", "8"},
{"大雨", "9"},
{"中到大雨", "9"},
{"", "13"},
};
weather::weather(Ui::climate * p)
: exUI(p)
{
manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
/*manager具有异步API当http请求完成后会通过finished信号进行通知,
* 接收和发送网络请求都会返回QNetworkReply*/
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
}
weather::~weather()
{
delete exUI;
}
void weather::getWeather()
{
delete manager;
}
void weather::http_sent()
{
QUrl url;
QString local_city = "101280301";
QNetworkRequest quest;
char quest_array[256]="http://t.weather.sojson.com/api/weather/city/";
sprintf(quest_array,"%s%s",quest_array,local_city.toUtf8().data());
quest.setUrl(QUrl(quest_array));
/*发送get网络请求*/
manager->get(quest);
}
void weather::replyFinished(QNetworkReply *reply)
{
qDebug()<<"The message has been received";
QString all = reply->readAll();//接收的的全部信息
QJsonParseError err;
QJsonDocument json_recv = QJsonDocument::fromJson(all.toUtf8(),&err);
if(!json_recv.isNull())
{
QJsonObject object = json_recv.object();
/*获取更新时间*/
QString SUT = object.value("cityInfo").toObject().value("updateTime").toString();
qDebug()<<"updata:\n"<< SUT;
/*获取温度*/
QJsonObject JO_data = json_recv.object().value("data").toObject();
QString wendu = JO_data.value("wendu").toString() + "°C";
// qDebug()<<"temp:\n"<< wendu;
/*获取湿度*/
QString shidu = JO_data.value("shidu").toString();
/*获取空气质量*/
QString quality = JO_data.value("quality").toString();
//qDebug()<<"quality:\n"<< quality;
/*获取天气预报*/
QJsonArray JA_forecast = JO_data.value("forecast").toArray();
for (int i=0; i<5; i++)
{
/*获取星期*/
QString week =JA_forecast[i].toObject().value("week").toString();
/*获取最大温度*/
QString high_temp =JA_forecast[i].toObject().value("high").toString();
/*获取最大温度*/
QString low_temp =JA_forecast[i].toObject().value("low").toString();
/*获取天气状态,多云*/
QString wtype = JA_forecast[i].toObject().value("type").toString();
/*获取风向*/
QString wind =JA_forecast[i].toObject().value("fx").toString();
/*获取注意事项*/
QString notice =JA_forecast[i].toObject().value("notice").toString();
QStringList list = SUT.split(":");//QString字符串分割函数
/*构造图标的路径*/
QString icon_path = ":/weather/image/" + weatherMap_night[wtype] + ".png";
/*晚上7点到早上六点换不同的图片*/
if((list[0].toInt()>19)||(list[0].toInt()>6))
{
QString icon_path = ":/weather/image/" + weatherMap[wtype] + ".png";
}
if(i==0)
{
exUI->temp_now->setText(wendu);
exUI->label_3->setText(wtype + " "+ high_temp + "/" +low_temp);
exUI->label_5->setText(wtype);
exUI->label_7->setText(high_temp + "/" +low_temp);
exUI->label_8->setText(wind);
QPixmap pixmap(icon_path);
exUI->label->setPixmap(pixmap.scaled(180,180));
exUI->label_6->setPixmap(pixmap.scaled(50,50));
exUI->notice->setAlignment(Qt::AlignCenter);
exUI->notice->setText(notice);
}
if(i==1)
{
exUI->label_30->setText(week);
exUI->label_29->setText(wtype);
exUI->label_32->setText(high_temp + "/" +low_temp);
exUI->label_33->setText(wind);
QPixmap pixmap(icon_path);
exUI->label_31->setPixmap(pixmap.scaled(50,50));
}
if(i==2)
{
exUI->label_35->setText(week);
exUI->label_34->setText(wtype);
exUI->label_37->setText(high_temp + "/" +low_temp);
exUI->label_38->setText(wind);
QPixmap pixmap(icon_path);
exUI->label_36->setPixmap(pixmap.scaled(50,50));
}
if(i==3)
{
exUI->label_40->setText(week);
exUI->label_39->setText(wtype);
exUI->label_42->setText(high_temp + "/" +low_temp);
exUI->label_43->setText(wind);
QPixmap pixmap(icon_path);
exUI->label_41->setPixmap(pixmap.scaled(50,50));
}
if(i==4)
{
exUI->label_45->setText(week);
exUI->label_44->setText(wtype);
exUI->label_47->setText(high_temp + "/" +low_temp);
exUI->label_48->setText(wind);
QPixmap pixmap(icon_path);
exUI->label_46->setPixmap(pixmap.scaled(50,50));
}
}
}
else
{
qDebug()<<"json_recv is NULL or is not a object !!";
}
reply->deleteLater();
}