基于Qt4的天气预报

基于Qt4的天气预报

前言

最近笔者想用Qt来实现一个简单的天气预报功能,虽然现在早已流行使用Qt5以上版本来做设计并且网络上也有非常多基于Qt5来实现天气预报的案例,但是对于很多初学者依然会使用Qt4来学习,因此笔者来分享一个基于Qt4实现的案例,希望对大家有所帮助。

一、效果展示

在这里插入图片描述

二、遇到的几个问题

2.1 Json数据解析

当我们通过网络使用中国天气网API接口:http://wthrcdn.etouch.cn/weather_mini?获取某地的天气信息时,获取成功后服务器返回的是一串Json数据,如下:

"{"data":{"yesterday":
   {"date":"9日星期一","high":"高温 24℃","fx":"南风","low":"低温 16℃","fl":"<![CDATA[4-5级]]>","type":"多云"},"city":"厦门",
    "forecast":[
      {"date":"10日星期二","high":"高温 22℃","fengli":"<![CDATA[4-5级]]>","low":"低温 14℃","fengxiang":"东北风","type":"多云"},
      {"date":"11日星期三","high":"高温 21℃","fengli":"<![CDATA[4-5级]]>","low":"低温 14℃","fengxiang":"东风","type":"晴"},
      {"date":"12日星期四","high":"高温 17℃","fengli":"<![CDATA[<3级]]>","low":"低温 14℃","fengxiang":"无持续风向","type":"阴"},
      {"date":"13日星期五","high":"高温 24℃","fengli":"<![CDATA[3-4级]]>","low":"低温 16℃","fengxiang":"东风","type":"阴"},
      {"date":"14日星期六","high":"高温 19℃","fengli":"<![CDATA[4-5级]]>","low":"低温 13℃","fengxiang":"东北风","type":"多云"}],
"ganmao":"将有一次强降温过程,且风力较强,极易发生感冒,请特别注意增加衣服保暖防寒。","wendu":"22"},"status":1000,"desc":"OK"}" 

因此,这样的数据我们不能直接使用,需要对其进行解析。而Qt4是没有JSon数据解析库的,很多人会说我们可以使用第三方库的方式来加入JSon数据解析相关库进行解析呀,是的没错,不过笔者这边要介绍的是另外一种简单的方式(使用QString中的两个方法):

方法一
QString QString::section ( QChar sep, int start, int end = -1, SectionFlags flags = SectionDefault ) const

QString::section 用来以某个字符切割字符串

参数说明:

sep表示用来切割的字符,
start表示开始切割的位置,
end表示切割的结束位置,
flag参数可以用来影响函数的行为的某些方面,例如是否区分大小写,是否跳过空字段和如何处理前导和尾随分隔符。
结果返回开始切割那个字符到结束切割的那个字符之后的那个字符串

方法二
QString QString::mid ( int position, int n = -1 ) const

QString::mid 用来获取指定位置子串

参数说明:

position截取的开始位置
n截取的长度

***************** 具体使用参考文末的源码展示 ********************
2.2数据显示出现乱码

由于reply->readAll();返回的字符串为QByteArray类型,需将QByteArray转化为QString,否则出现乱码问题。这边笔者参考了很多网上的QByteArray转QString的方式,都无法起到作用,因此尝试使用间接转换的方法:将QByteArraychar *,再将char *QString,解决问题。笔者有一篇 Qt4-const char*转QString.的文章可供参考。

***************** 具体使用参考文末的源码展示 ********************
2.3返回的Json数据不是天气信息
{"status":1002,"desc":"invilad-citykey"}" 

这边表示数据申请时城市名称有问题,正确格式:http://wthrcdn.etouch.cn/weather_mini?city=厦门

三、源码

//.pro文件
#-------------------------------------------------
#
# Project created by QtCreator 2020-03-09T14:51:30
#
#-------------------------------------------------

QT       += core gui network

TARGET = 07_weatherTest
TEMPLATE = app


SOURCES += main.cpp\
        widget.cpp

HEADERS  += widget.h

FORMS    += widget.ui

//main.c 文件
#include <QtGui/QApplication>
#<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值