基於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