Qt项目天气预报(5) - 根据JSON刷新天气信息+城市匹配

刷新当天天气

我们使用如下api接入,当然需要自己去 易客云天气API免费天气API接口|天气预报接口|全球天气API接口|气象预警|空气质量 (tianqiapi.com)注册后生成自己的对应id才可以使用

//专业天气v61
http://v1.yiketianqi.com/api?unescape=1&version=v61&appid=65521391&appsecret=Dv2eKMLL


======================================================================

参考解析的json文件


解析获取到的json数据 - parseWeatherJsonData

void Widget::parseWeatherJsonData(QByteArray rawData)
{
    QJsonDocument jsonObj = QJsonDocument::fromJson(rawData); // 先把原始数据转为JSON类型

    if(!jsonObj.isNull() && jsonObj.isObject()){ // jsonObj不为空,并且是Obeject类型
     QJsonObject objRoot = jsonObj.object();
     //解析我们获得的json数据, 填入到相关 控件中

     //解析日期
     QString date = objRoot["date"].toString();
     QString week = objRoot["week"].toString();
     ui->labelCurrentData->setText(date + " " + week); // 把读取到的日期和星期加入到右上角的控件  labelCurrentData 中

     //解析城市名称
     QString cityName =objRoot["city"].toString();
     ui->labelCity->setText(cityName+"市");

     //解析当前温度
     QString curTem = objRoot["tem"].toString();
     ui->labelTemp->setText(curTem+"℃"); // 显示当前温度
     QString lowTem = objRoot["tem2"].toString();
     QString highTem = objRoot["tem1"].toString();
     ui->labelTempRange->setText(lowTem + "~" +highTem +"℃"); // 显示温度范围

     //解析天气类型
     ui->labelWeatherType->setText(objRoot["wea"].toString());

     //解析感冒指数
     ui->labelGanMao->setText(objRoot["air_tips"].toString());


     //解析风向
     ui->labelFengXiang->setText(objRoot["win"].toString()); //风向
     ui->labelFengXiangData->setText(objRoot["win_speed"].toString());//风力

     //解析PM2.5
     ui->labelPM25Data ->setText(objRoot["air_pm25"].toString());
     //湿度
     ui->labelShiDuData->setText(objRoot["humidity"].toString());
     //空气质量
     ui->labelAriData->setText(objRoot["air_level"].toString());
    }
}

在readHttpReply() 里面添加

效果演示


 

支持不同城市的天气预报


绑定信号与槽;

在构造函数中绑定信号与槽

    //由QNetworkAccessManager 发起request请求:
    //实例化network对象
    manager = new QNetworkAccessManager(this);
    connect(manager, &QNetworkAccessManager::finished,[](){
        qDebug()<<"manager Finnish!";
    });

  urlyiKe ="http://v1.yiketianqi.com/api?unescape=1&version=v61&appid=65521391&appsecret=Dv2eKMLL";

    QUrl urlTianQi(urlyiKe);

    //QNetworkRequest - 指定请求的url地址
    QNetworkRequest res(urlTianQi); //根据网址实例化QUrl对象,再根据这个对象实例化  QNetworkRequest对象
    reply = manager->get(res);
    //QNetworkReply网络请求后进行信号读取
    connect(manager,&QNetworkAccessManager::finished,this,&Widget::readHttpReply);

每个城市id的json文件在资源里

检索json文件,寻找我们需要城市id - getCityCodeFromName

// 打开我们配置的json文件,找到对应城市id
QString getCityCodeFromName(QString name)
{
    QFile file(":/citycode.json");
    file.open(QIODevice::ReadOnly);
    QByteArray rawData = file.readAll();
    file.close();
    QJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);

    if(jsonDoc.isArray()){
        QJsonArray citys = jsonDoc.array();
        for(QJsonValue value:citys){
            if(value.isObject()){
                QString cityName = value["city_name"].toString();
                if(cityName == name){
                 return value["city_code"].toString(); //能找到返回名字
                }

            }

        }
        return ""; //找不到,返回空

    }

}


 

 on_pushButton_clicked(搜索槽函数)

//根据用户输入城市名字获取数据 
void Widget::on_pushButton_clicked()
{
    QString cityNameFromUser = ui->lineEditCity->text();
    QString cityCode = getCityCodeFromName(cityNameFromUser);
    if(cityCode != ""){ // 能匹配到根据城市id 匹配 url
        urlyiKe += "&cityid=" +cityCode;
        qDebug()<<urlyiKe;
        manager->get(QNetworkRequest(QUrl(urlyiKe)));
    }
    else{ // 没找到

        QMessageBox msg;
        msg.setWindowTitle("错误");
        msg.setText("请输入正确的城市名称!");
        msg.setStyleSheet("QPushButton{color:red};");//设置按钮样式
        msg.setStandardButtons(QMessageBox::Ok); //添加Ok按钮
        msg.exec();// 调用QMessageBox对象
    }

}

效果演示

// 根据不同城市给出不同的天气情况



 

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c++ qt天气预报项目是一个基于qt框架的气象应用程序,主要功能是提供准确的天气信息查询服务。它具有直观的用户界面,可设置城市天气、温度、湿度、气压等信息,还可显示未来几天的天气预报,方便用户随时了解天气情况。 在实现中,项目主要分为两个部分:前端和后端。前端主要负责展示数据和用户交互,使用qt的QML语言、JavaScript和CSS等技术进行布局和设计。后端主要负责实现数据的获取和处理,使用qt的C++语言、网络通信和解析技术,从网络上获取数据,并进行解析与处理。 在该项目中,通过网络请求获得实时天气信息,如空气质量、温度、湿度、气压等,并根据用户设置的城市信息,显示对应的天气信息。同时,项目还提供城市搜索、切换、添加、删除等功能,并支持开机自启动。 此外,项目还包含了数据缓存和网络异常处理功能,当网络异常时,项目可以显示错误信息,并提示用户检查网络连接,保证用户能够正常使用。 总的来说,C++ qt天气预报项目是一款非常实用的天气应用程序,具有简单易用、界面美观、功能实用等特点,帮助用户时刻掌握天气情况,是一款非常实用和有用的工具。 ### 回答2: C++ Qt 天气预报项目是一个基于 Qt 框架开发的一款天气预报应用程序。该项目主要利用了 Qt 的 QWidget 和 QWebKit 组件来实现应用程序的界面和数据获取功能。在编写程序界面时,采用了 Qt Designer 工具进行设计,通过信号机制实现用户交互和数据实时刷新。 该应用程序能够自动获取用户所在地区的天气信息,并展示当前天气情况、未来几天的天气预报等相关信息。在数据获取方面,通过 WebView 组件实现对天气网站的模拟访问,获取天气数据并进行解析和处理,最终将数据展示在界面上。 除了基本的天气信息展示功能外,该应用程序还具有自定义城市、多城市查询、背景图片更换等一些实用的功能。在多城市查询方面,用户可以添加多个城市进行查询,并支持切换城市信息。在背景图片更换方面,用户可以选择不同的背景主题,从而实现界面个性化定制。 在代码实现方面,该项目重点涉及信号机制、数据处理和展示等方面的学习和应用。整个程序采用模块化架构,具有灵活性和可扩展性,非常适合初学者进行 Qt 编程练习。该项目还具有实际应用价值,能够帮助用户随时获取所在地区及其他城市天气信息,使用户出行更加方便。 ### 回答3: C++ Qt 天气预报项目是一个使用C++ 编程语言,通过Qt GUI程序库和天气API开发的一款实用工具。它可以实现天气查询,每日天气信息的更新,城市切换、温度切换、语言切换等功能。 该项目的实现分为三个模块:天气API数据获取模块、天气信息处理模块和GUI界面设计与交互模块。天气API数据获取模块负责从API中获取天气数据,天气信息处理模块用于对天气数据进行处理, GUI界面设计与交互模块则主要实现用户界面的设计、功能按钮操作等。 在该项目的实现中,C++编程语言的高效性和良好的性能表现得到了充分的发挥。Qt GUI程序库提供了丰富的GUI组件和封装好的API,为项目开发提供了便利和支持。天气API的获取和处理模块为项目提供了可靠的数据来源和数据处理能力。 总的来说,C++ Qt 天气预报项目是一款实用、高效、易用的工具,为用户提供了便利的天气查询服务和多功能操作,同时也展示了C++编程语言Qt GUI程序库的优异特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值