qt网络获取历史天气与空气质量

    设计一个查询气温与空气质量的GUI,使其能够具备基本的网络访问功能,获取网络数据并进行解析处理然后通过界面图标显示出来,具有简单的人机交互选项,例如城市日期的选择,图注风格选择等

    同时能够将首次获取的数据保存到本地,方便以后直接本地获取。

qt网络获取历史天气与空气质量


    dataWorker类派生于QObject主要负责数据的获取与处理,接收到mainWidget类发来的信号后进行网络访问获取数据,同时进行数据解析,将数据保存至本地文档。

    mainWidget类派生于Qwidget,负责人机交互与数据展示,包括处理用户点击和图标的绘制。

    而通过界面编辑器搭建了用户界面的基本框架

    要想使用界面编辑器,首先我们需要使用模板创建一个带有ui的基于QwidgetQmainWindow的应用程序

qt网络获取历史天气与空气质量qt网络获取历史天气与空气质量

    QNetworkRequest类用于表示网络请求,它也充当一个与请求信息相关的通用容器,例如:任何头信息和使用的加密相关的信息。当一个request对象被构造时,指定的URL决定所用的协议。目前HTTP、FTP和本地文件URLs支持上传和下载。

    QNetworkAccessManager类为网络访问管理类,用于协调网络操作,一旦创建一个request,该类用来发出请求并发射信号来报告它的进度。manager也协调cookies的使用在client存储数据、请求的身份验证、代理的使用。

    QNetworkReply类用于网络请求的响应,当一个request被发出后,QNetworkAccessManager就会创建相应的响应,通过QNetworkReply提供的信号可以单独监听每个响应,或者使用manager的信号。由于QNetworkReplyQIODevice的一个子类,可以同步或异步处理响应;也就是说,阻塞或非阻塞操作。

    

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE

    一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

    需要注意的是,QNetworkReply对象完成数据获取工作后需要对使用deletlater函数对其释放,并立即将该指针设为空值,在事件循环结束时,该对象被删除

qt网络获取历史天气与空气质量


    在最后一行代码中返回了HTTP的状态码,以2开头表示服务器成功接收并理解了我们的请求,以3开头就表示该页面被重定向到了另一个网址,以4开头表明本次请求无法实现

    而我们对网络数据的解析都是通过tag标签来完成的

    TAG标签是自定义或通用的,准确、具体的描述标记文本的内容


qt网络获取历史天气与空气质量


    QXmlStreamReader类提供了针对Xml文本的基于流方式的解析方法,也就是文档以流的形式从头到尾顺序遍历并处理。

    而QStringList类作为辅助,通过使用简化中间空格,去掉首尾空格,合并字符,拆分字符等命令能够实现数据的格式化输出

    在本段代码中我还添加了自定义信号dataError(),如果读取错误,便将界面按钮复位

qt网络获取历史天气与空气质量

要想将自定义类作为信号参数传递,

1、该类必须提供一个公有的默认构造函数类

2、该类必须提供一个公有的拷贝构造函数类,,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的

3、该类必须提供一个公有的析构函数

4、该类必须使用宏Q_DECLARE_METATYPE进行注册

5、该类必须在程序中使用qRegisterMetaType进行注册

qt网络获取历史天气与空气质量


运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。


qt网络获取历史天气与空气质量

场景则包含了不同的几何形状图元。多个视图可以观察一整个单独的场景,

qt网络获取历史天气与空气质量qt网络获取历史天气与空气质量qt网络获取历史天气与空气质量qt网络获取历史天气与空气质量