当前位置:   article > 正文

基于QT5 HTTP GET方式获取天气信息_qt什么版本以后带有.get()

qt什么版本以后带有.get()

QT版本:Qt Creator 5.7.0

QT获取天气信息一般都是通过调用天气服务器的接口来获取的,而获取天气的接口有很多,大家可以自行在网上查找。

本示例采用的获取天气的服务器接口为:  http://wthrcdn.etouch.cn/weather_mini,请求参数名city参数内容为要查询天气的城市名称(utf8字符串)。请求方式为GET

使用QT调用天气接口则需要用到网络类,通过HTTP请求数据。

首先在pro文件中添加:

QT       += network

然后添加网络相关头文件:

  1. #include <QtNetwork/QNetworkAccessManager>
  2. #include <QtNetwork/QNetworkRequest>
  3. #include <QtNetwork/QNetworkReply>

由于从该服务器请求的天气数据是以json的形式回复的,所以需要用到JSON解析相关的头文件。

  1. #include <QJsonDocument>
  2. #include <QJsonObject>
  3. #include <QJsonArray>

相关变量定义如下:

  1. QNetworkAccessManager *manager; //请求句柄
  2. QString fengli; //风力
  3. QString wendu; //温度
  4. QString weather_type; //天气类型

创建网络请求对象,连接信号与槽:

  1. manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
  2. connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));//关联信号和槽

当收到http请求回复的数据,便会调用replyFinished槽函数。

请求气数据:

  1. void Widget::on_pushButton_clicked() //点击查询请求天气数据
  2. {
  3. QString local_city = ui->lineEdit->text().trimmed(); //获得需要查询天气的城市名称
  4. char quest_array[256]="http://wthrcdn.etouch.cn/weather_mini?city=";
  5. QNetworkRequest quest;
  6. sprintf(quest_array,"%s%s",quest_array,local_city.toUtf8().data());
  7. quest.setUrl(QUrl(quest_array));
  8. quest.setHeader(QNetworkRequest::UserAgentHeader,"RT-Thread ART");
  9. /*发送get网络请求*/
  10. manager->get(quest);
  11. }

回复数据处理槽函数:

  1. void Widget::replyFinished(QNetworkReply *reply) //天气数据处理槽函数
  2. {
  3. qDebug()<<"recv weather data!!";
  4. QString all = reply->readAll();
  5. ui->textEdit->setText(all); //将接收到的数据显示出来
  6. QJsonParseError err;
  7. QJsonDocument json_recv = QJsonDocument::fromJson(all.toUtf8(),&err);//解析json对象
  8. qDebug() << err.error;
  9. if(!json_recv.isNull())
  10. {
  11. QJsonObject object = json_recv.object();
  12. if(object.contains("data"))
  13. {
  14. QJsonValue value = object.value("data"); // 获取指定 key 对应的 value
  15. if(value.isObject())
  16. {
  17. QJsonObject object_data = value.toObject();
  18. if(object_data.contains("forecast"))
  19. {
  20. QJsonValue value = object_data.value("forecast");
  21. if(value.isArray())
  22. {
  23. QJsonObject today_weather = value.toArray().at(0).toObject();
  24. weather_type = today_weather.value("type").toString();
  25. QString low = today_weather.value("low").toString();
  26. QString high = today_weather.value("high").toString();
  27. wendu = low.mid(low.length()-3,4) +"~"+ high.mid(high.length()-3,4);
  28. QString strength = today_weather.value("fengli").toString();
  29. strength.remove(0,8);
  30. strength.remove(strength.length()-2,2);
  31. fengli = today_weather.value("fengxiang").toString() + strength;
  32. ui->type->setText(weather_type); //显示天气类型
  33. ui->wendu->setText(wendu); //显示温度
  34. ui->fengli->setText(fengli); //显示风力
  35. }
  36. }
  37. }
  38. }
  39. }else
  40. {
  41. qDebug()<<"json_recv is NULL or is not a object !!";
  42. }
  43. reply->deleteLater(); //销毁请求对象
  44. }

 天气请求回复的JSON数据中含有多天的详细天气信息,但在此只解析了当天的天气状态、温度和风力三个参数信息,以供参考,Demo程序演示效果如下。

获取天气demo源码链接:https://download.csdn.net/download/fangye945a/10839157

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/510553
推荐阅读
相关标签
  

闽ICP备14008679号