1. 程式人生 > >基於Qt的新冠肺炎疫情資料實時監控平臺1.1版本

基於Qt的新冠肺炎疫情資料實時監控平臺1.1版本

宅家無聊,不如學點技術!

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格式詳細資訊,如下:

好了,有了介面返回的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工程和安裝包下載連結傳送給你。

推薦閱讀

  • 基於Qt的新冠肺炎疫情資料實時監控平臺(開源小專案)
  • Qt平臺下使用QJson解析和構建JSON字串
  • Qt實現軟體自動更新的一種簡單方法
  • Qt小專案之串列埠助手控制LED
  • 電路板上的這些標誌你都知道是什麼含義嗎?

  • 個人部落格:www.wangchaochao.top
  • 我的公眾號:mcu149