基于Qt的新冠肺炎疫情数据实时监控平台1.1版本

修复BUG,添加辟谣信息详情显示功能

Posted by Wang Chao on February 15, 2020

宅家无聊,不如学点技术!

1.前言

上一篇文章,介绍了使用基于Qt开发的新冠病毒肺炎疫情监控平台的实现思路和简单过程,主要包括数据接口的获取和Qt的开发,这两天修复一些BUG,完善了部分功能,如下:

  • 新增辟谣信息详情显示界面,点击谣言标题弹出信息详情。
  • 修复数据类型定义错误造成的折线显示错误的BUG
  • 适配Linux,修改打开超链接函数

2.BUG修复

今天早上打开一看,累计疑似/确诊折线变成了下面这样,

而腾讯新闻页面的是这样:

很明显是纵轴的最大值设置错了,仔细观察2月14日的累计确诊病例是6万多,很明显是超过了数据16位整形的最大值65535,仔细一查代码,果然是设置成了uint16类型,改为32位的整形或者double类型就没问题了,如下:

通过查找历史数据可以知道,2月13日的累计确诊人数是63932,2月14日的确诊人数是66576,刚好超过uint16_t数据类型运行的最大值65535。这也就之前的折线图都是正确的原因,因为还没超过最大值,这也提醒我们定义变量时,一定要考虑到数据允许的范围。

3.Linux系统适配

由于Qt的跨平台特性,只需要编写一套代码,然后在不同平台下的Qt环境中去编译,就可以生成运行在不同平台下的执行文件。我们来试试看这个小项目在Linux下的效果。当我尝试在Ubuntu环境下编译工程时,报错提示找不到头文件:

这也不奇怪,因为windows.h是Windows系统下的头文件,而Ubuntu肯定是没有的。程序中在打开超链接时,会调用这个windows.h中的一个ShellExecuteA函数:

##include "windows.h"
............
void about::anchorClickedSlot(const QUrl& url)
{
    QDesktopServices::openUrl(url);
//    ShellExecuteA(NULL, "open", url.toString().toStdString().c_str(), "", "", SW_SHOW);
}

在网上搜索一番,有网友介绍说可以使用qt_windows.h,更改之后再次编译,还是报错,打开头文件一看,还是调用了windows.h文件:

还好,Qt原生的QDesktopServices类中有可以打开链接的函数,兼容Windows和Linux系统。

#include <QDesktopServices>
............
void about::anchorClickedSlot(const QUrl& url)
{
    QDesktopServices::openUrl(url);
//    ShellExecuteA(NULL, "open", url.toString().toStdString().c_str(), "", "", SW_SHOW);
}

这个QDesktopServices类中,不仅可以调用默认浏览器打开链接,还可以打开文件夹,获取桌面、文档、图片等目录。

编译成功之后,在Linux下的运行界面:

4.添加辟谣信息详情显示

在1.0版本程序中,查看辟谣信息的详情,可以通过点击谣言标题,然后调用默认浏览器打开这个链接,再去查看详细的信息,但是腾讯的这个信息界面是针对手机端设计的,PC上浏览效果并不好,如下:

手机端:

上一篇文章我们也介绍了,腾讯开放了一个接口,可以根据谣言的ID号,去获取谣言的详细信息,数据为JSON格式,但是上一个版本程序中并没有使用这个接口,这次我们把他用上。

如这条辟谣新闻:

  • 标题:阴雨天和大雾天会增加新冠病毒感染风险
  • ID:8be33c500e00257c97419ac24ab59d8f

我们访问这样一个地址:

https://vp.fact.qq.com/miniArtData?id=8be33c500e00257c97419ac24ab59d8f ,就会得到这条谣言新闻的JSON格式详细信息,如下:

img

好了,有了接口返回的JSON数据,我们就可以直接解析使用了。

逻辑设计也很简单,在用户点击谣言标题时,弹出窗口,而这个窗口里显示的就是这条谣言的详细信息,如谣言鉴定信息,查证者及其机构,来源等等,返回之后再次点击其他标题,则显示对应的详细信息。

Qt实现也很简单,增加一个GET请求,保存返回的数据,然后解析,再增加一个窗口,把解析出来的数据显示出来。富文本的显示和之前一样,还是采用的HTML模板方式,原理类似printf格式化输出,这种富文本的显示方法目前还没有人使用过。

5.开源地址

本项目Qt工程所有的代码和安装包下载地址已经开源在Github和Gitee上,现在已经更新到1.1版本,地址如下:

  • 国外GitHub: https://github.com/whik/qt_2019_ncov
  • 国内Gitee: https://gitee.com/whik/qt_2019_ncov

如果你已经关注了我的公众号(ID:mcu149),可以在后台回复:疫情监控,我会把最新版的Qt工程和安装包下载链接发送给你。

推荐阅读


  • 个人博客:www.wangchaochao.top
  • 我的公众号:mcu149