开服网站源码,wordpress 附件地址,广告制作包括哪些项目,上市公司网站建设方案Qt天气预报系统获取天气数据 1、获取天气数据1.1添加天气类头文件1.2定义今天和未来几天天气数据类1.3定义一个解析JSON数据的函数1.4在mainwindow中添加weatherData.h1.5创建今天天气数据和未来几天天气数据对象1.6添加parseJson定义1.7把解析JSON数据添加进去1.8添加错误1.9解… Qt天气预报系统获取天气数据 1、获取天气数据1.1添加天气类头文件1.2定义今天和未来几天天气数据类1.3定义一个解析JSON数据的函数1.4在mainwindow中添加weatherData.h1.5创建今天天气数据和未来几天天气数据对象1.6添加parseJson定义1.7把解析JSON数据添加进去1.8添加错误1.9解析整个天气数据 2、.h文件和.cpp文件2.1 mainwindow.h文件2.2weatherData.h文件2.3 .cpp文件 1、获取天气数据
1.1添加天气类头文件
鼠标放到项目上 右键选择Add New... 选择C选择CHeader File 起名为weatherData 1.2定义今天和未来几天天气数据类
//今天的数据类
class Today{
public:Today(){city 广州; //城市date 2025-1-10; //日期weatherType 多云; //天气类型highTem 30; //最高温lowTem 18; //最低温ganMao 感冒指数; //感冒指数Temperature 0; //温度Humidity 0%; //湿度PM25 0; //PM2.5windType 南风; //风的类型windPower 2级; //风力airQuality 无数据; //空气质量}QString city;QString date;int Temperature;QString weatherType;int highTem;int lowTem;QString ganMao;QString Humidity;int PM25;QString windType;QString windPower;QString airQuality;};//未来几天的数据类
class Day{
public:Day(){week 周五; //星期date 2023-7-29; //日期weatherType 多云; //天气类型airQuality 0; //空气指数优 //空气质量highTem 0; //最高温lowTem 0; //最低温windType 南风; //风的类型windPower 2级; //风力}QString week;QString date;QString weatherType;int airQuality;int highTem;int lowTem;QString windType;QString windPower;
};1.3定义一个解析JSON数据的函数
void parseJson(QByteArray byteArray); //解析JSON数据1.4在mainwindow中添加weatherData.h
#include weatherData.h1.5创建今天天气数据和未来几天天气数据对象
Today today; //定义一个今天天气数据对象
Day day[7]; //定义未来几天天气数据对象1.6添加parseJson定义 1.7把解析JSON数据添加进去
void MainWindow::readHttpReply(QNetworkReply *reply)
{int status_code reply-attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); //状态码//请求错误if(reply-error() ! QNetworkReply::NoError || status_code ! 200){qDebug() reply-errorString().toLatin1().data(); //打印错误信息QMessageBox::warning(this,天气,请求数据失败, QMessageBox::Ok); //弹出警告信息框}//请求成功else{QByteArray byteArray reply-readAll(); //读取服务器数据qDebug() read all: byteArray.data(); //打印接收到的数据parseJson(byteArray); //解析JSON数据}reply-deleteLater(); //释放对象
}1.8添加错误
//解析JSON格式天气数据
void MainWindow::parseJson(QByteArray byteArray)
{//错误QJsonParseError err;
}鼠标放到QJsonParseError上 ALTEnter选择添加头文件后面的也类似使用一个新类的时候记得添加头文件 1.9解析整个天气数据
//解析JSON格式天气数据
void MainWindow::parseJson(QByteArray byteArray)
{//错误QJsonParseError err; //创建一个错误对象QJsonDocument doc QJsonDocument::fromJson(byteArray, err); //将JSON格式解析为QJsonDocument对象//如果错误if(err.error ! QJsonParseError::NoError){return; //返回}QJsonObject rootObj doc.object(); //创建一个QJsonObject对象返回文档// qDebug() rootObj.value(message).toString();//1.解析城市和日期today.city rootObj.value(cityInfo).toObject().value(city).toString(); //城市today.date rootObj.value(date).toString(); //日期//2.解析昨天yesterday数据QJsonObject objData rootObj.value(data).toObject(); //获取data对象QJsonObject objYesterday objData.value(yesterday).toObject(); //昨天day[0].week objYesterday.value(week).toString(); //星期day[0].date objYesterday.value(date).toString(); //日期day[0].weatherType objYesterday.value(type).toString(); //天气类型QString highT; //最高温highT objYesterday.value(high).toString().split( ).at(1); //空格分割取分割后第二个数据1是第二个0是第一个day[0].highTem highT.left(highT.length() - 1).toInt(); //把℃减掉只剩数字QString lowT; //最低温lowT objYesterday.value(low).toString().split( ).at(1);day[0].lowTem lowT.left(lowT.length() - 1).toInt();//风的类型风力day[0].windType objYesterday.value(fx).toString(); //风的类型 day[0].windPower objYesterday.value(fl).toString(); //风力//空气指数day[0].airQuality objYesterday.value(aqi).toDouble(); //空气质量//3.解析未来几天的天气数据QJsonArray forecastArray objData.value(forecast).toArray(); //获取forecast数组//遍历未来几天天气数据for(int i0 ; i6 ; i){QJsonObject forecastObj forecastArray[i].toObject(); //获取JSON对象day[i1].week forecastObj.value(week).toString(); //星期day[i1].date forecastObj.value(ymd).toString(); //日期day[i1].weatherType forecastObj.value(type).toString(); //天气类型//空气指数day[i1].airQuality forecastObj.value(aqi).toDouble(); //空气质量QString highT; //最高温highT forecastObj.value(high).toString().split( ).at(1); //空格分割取分割后第二个数据1是第二个0是第一个day[i1].highTem highT.left(highT.length() - 1).toInt(); //把℃减掉只剩数字QString lowS; //最低温lowS forecastObj.value(low).toString().split( ).at(1);day[i1].lowTem lowS.left(lowS.length() - 1).toInt();//风的类型风力day[i1].windType forecastObj.value(fx).toString(); //风的类型day[i1].windPower forecastObj.value(fl).toString(); //风力//4、解析今天的数据today.Temperature objData.value(wendu).toInt(); //温度today.ganMao objData.value(ganmao).toString(); //感冒指数today.Humidity objData.value(shidu).toString(); //湿度today.PM25 objData.value(pm25).toDouble(); //PM2.5today.airQuality objData.value(quality).toString(); //空气质量//forecast里面也有今天的数据today.weatherType day[1].weatherType; //天气类型today.highTem day[1].highTem; //最高温today.lowTem day[1].lowTem; //最低温today.windType day[1].windType; //风的类型today.windPower day[1].windPower; //风力}
}2、.h文件和.cpp文件
2.1 mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include QMainWindow
#include QMenu
#include QMessageBox
#include QNetworkAccessManager
#include QNetworkReply
#include weatherData.hQT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();protected:void mousePressEvent(QMouseEvent *event) override; //重写鼠标点击事件函数void mouseMoveEvent(QMouseEvent *event) override; //重写鼠标移动事件函数void getWeatherInfo(QString citycode); //获取天气数据void parseJson(QByteArray byteArray); //解析JSON数据private slots:void on_pushButton_quit_clicked(); //关闭UI界面void onQuitActTriggered(); //菜单被点击后的处理public slots:void readHttpReply(QNetworkReply *reply); //新建一个网络请求获取的槽函数private:Ui::MainWindow *ui;QMenu *quitMenu; //创建一个菜单指针QAction *quitAct; //定义一个动作QPoint moffset; //窗口移动时鼠标与窗口左上角的偏移值QNetworkAccessManager *NetAccessManger; //声明一个网络请求对象bool closePOPWindow(); //关闭窗口的弹窗Today today; //定义一个今天天气数据对象Day day[7]; //定义未来几天天气数据对象
};
#endif // MAINWINDOW_H2.2weatherData.h文件
#ifndef WEATHERDATA_H
#define WEATHERDATA_H
#include QString
//今天的数据类
class Today{
public:Today(){city 广州; //城市date 2025-1-10; //日期weatherType 多云; //天气类型highTem 30; //最高温lowTem 18; //最低温ganMao 感冒指数; //感冒指数Temperature 0; //温度Humidity 0%; //湿度PM25 0; //PM2.5windType 南风; //风的类型windPower 2级; //风力airQuality 无数据; //空气质量}QString city;QString date;int Temperature;QString weatherType;int highTem;int lowTem;QString ganMao;QString Humidity;int PM25;QString windType;QString windPower;QString airQuality;};//未来几天的数据类
class Day{
public:Day(){week 周五; //星期date 2023-7-29; //日期weatherType 多云; //天气类型airQuality 0; //空气指数优 //空气质量highTem 0; //最高温lowTem 0; //最低温windType 南风; //风的类型windPower 2级; //风力}QString week;QString date;QString weatherType;int airQuality;int highTem;int lowTem;QString windType;QString windPower;
};
#endif // WEATHERDATA_H2.3 .cpp文件
#include mainwindow.h
#include ui_mainwindow.h#include QJsonArray
#include QJsonObject
#include QJsonParseError
#include QMouseEvent
#include weatherData.hMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui-setupUi(this);setWindowFlag(Qt::FramelessWindowHint);// this-setLayout(ui-gridLayoutGlobal); //让界面随着窗口变幻大小quitMenu new QMenu(this); //创建一个QMenu对象quitAct new QAction(QIcon(:/widget/quit.png), tr(退出), this); //定义一个退出动作quitMenu-addAction(quitAct); //添加动作// connect(quitMenu,QMenu::triggered,this,[]{// this-close();// }); //连接信号与槽connect(quitMenu,QMenu::triggered,this,MainWindow::onQuitActTriggered); //连接菜单被触发的信号与槽NetAccessManger new QNetworkAccessManager(this); //实例化一个网络请求对象connect(NetAccessManger,QNetworkAccessManager::finished,this,MainWindow::readHttpReply); //连接网络请求获取的信号与槽//101010100是北京的城市编码getWeatherInfo(101010100);}MainWindow::~MainWindow()
{delete ui;
}//鼠标点击
void MainWindow::mousePressEvent(QMouseEvent *event)
{//如果右键被按下if(event-button() Qt::RightButton){quitMenu-exec(QCursor::pos()); //在当前鼠标位置显示菜单}//当前鼠标位置 event-globalPos()//当前窗口位置 this-pos()if(event-button() Qt::LeftButton){moffset event-globalPos() - this-pos();}
}//鼠标移动
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{this-move(event-globalPos() - moffset); //移动窗口
}//弹窗
bool MainWindow::closePOPWindow()
{// 创建一个消息框询问用户是否真的要退出QMessageBox mes;mes.setWindowTitle(关闭窗口);// mes.setWindowFlags(Qt::Drawer); //把标题栏去掉mes.setIcon(QMessageBox::Warning); //设置一个警告图片mes.setText(是否关闭窗口); //弹窗文本mes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); //设置两个按钮mes.setWindowIcon(QIcon(:/widget/dog.png)); // 设置窗口图标mes.setButtonText(QMessageBox::Ok, tr(确定)); //ok改为确认mes.setButtonText(QMessageBox::Cancel, tr(取消)); //Cancel改为取消// 显示消息框并等待用户交互int result mes.exec();// 根据用户的选择执行相应的操作if (result QMessageBox::Ok) {// 用户选择了确定关闭主窗口this-close();return true;}// 用户选择了取消不关闭主窗口else{return false; // 窗口关闭操作失败}
}//右上角退出
void MainWindow::on_pushButton_quit_clicked()
{closePOPWindow();
}//鼠标右键退出
void MainWindow::onQuitActTriggered()
{closePOPWindow();
}//获取天气数据
void MainWindow::getWeatherInfo(QString citycode)
{QUrl url(http://t.weather.itboy.net/api/weather/city/ citycode); //天气数据接口和城市编码NetAccessManger-get(QNetworkRequest(url)); //发送GET请求获取数据}//解析JSON格式天气数据
void MainWindow::parseJson(QByteArray byteArray)
{//错误QJsonParseError err; //创建一个错误对象QJsonDocument doc QJsonDocument::fromJson(byteArray, err); //将JSON格式解析为QJsonDocument对象//如果错误if(err.error ! QJsonParseError::NoError){return; //返回}QJsonObject rootObj doc.object(); //创建一个QJsonObject对象返回文档// qDebug() rootObj.value(message).toString();//1.解析城市和日期today.city rootObj.value(cityInfo).toObject().value(city).toString(); //城市today.date rootObj.value(date).toString(); //日期//2.解析昨天yesterday数据QJsonObject objData rootObj.value(data).toObject(); //获取data对象QJsonObject objYesterday objData.value(yesterday).toObject(); //昨天day[0].week objYesterday.value(week).toString(); //星期day[0].date objYesterday.value(date).toString(); //日期day[0].weatherType objYesterday.value(type).toString(); //天气类型QString highT; //最高温highT objYesterday.value(high).toString().split( ).at(1); //空格分割取分割后第二个数据1是第二个0是第一个day[0].highTem highT.left(highT.length() - 1).toInt(); //把℃减掉只剩数字QString lowT; //最低温lowT objYesterday.value(low).toString().split( ).at(1);day[0].lowTem lowT.left(lowT.length() - 1).toInt();//风的类型风力day[0].windType objYesterday.value(fx).toString(); //风的类型day[0].windPower objYesterday.value(fl).toString(); //风力//空气指数day[0].airQuality objYesterday.value(aqi).toDouble(); //空气质量//3.解析未来几天的天气数据QJsonArray forecastArray objData.value(forecast).toArray(); //获取forecast数组//遍历未来几天天气数据for(int i0 ; i6 ; i){QJsonObject forecastObj forecastArray[i].toObject(); //获取JSON对象day[i1].week forecastObj.value(week).toString(); //星期day[i1].date forecastObj.value(ymd).toString(); //日期day[i1].weatherType forecastObj.value(type).toString(); //天气类型//空气指数day[i1].airQuality forecastObj.value(aqi).toDouble(); //空气质量QString highT; //最高温highT forecastObj.value(high).toString().split( ).at(1); //空格分割取分割后第二个数据1是第二个0是第一个day[i1].highTem highT.left(highT.length() - 1).toInt(); //把℃减掉只剩数字QString lowS; //最低温lowS forecastObj.value(low).toString().split( ).at(1);day[i1].lowTem lowS.left(lowS.length() - 1).toInt();//风的类型风力day[i1].windType forecastObj.value(fx).toString(); //风的类型day[i1].windPower forecastObj.value(fl).toString(); //风力//4、解析今天的数据today.Temperature objData.value(wendu).toInt(); //温度today.ganMao objData.value(ganmao).toString(); //感冒指数today.Humidity objData.value(shidu).toString(); //湿度today.PM25 objData.value(pm25).toDouble(); //PM2.5today.airQuality objData.value(quality).toString(); //空气质量//forecast里面也有今天的数据today.weatherType day[1].weatherType; //天气类型today.highTem day[1].highTem; //最高温today.lowTem day[1].lowTem; //最低温today.windType day[1].windType; //风的类型today.windPower day[1].windPower; //风力}
}//网络请求获取
void MainWindow::readHttpReply(QNetworkReply *reply)
{int status_code reply-attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); //状态码//请求错误if(reply-error() ! QNetworkReply::NoError || status_code ! 200){qDebug() reply-errorString().toLatin1().data(); //打印错误信息QMessageBox::warning(this,天气,请求数据失败, QMessageBox::Ok); //弹出警告信息框}//请求成功else{QByteArray byteArray reply-readAll(); //读取服务器数据qDebug() read all: byteArray.data(); //打印接收到的数据parseJson(byteArray); //解析JSON数据}reply-deleteLater(); //释放对象
}获取天气数据完成