宅家無聊,不如學點技術!
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
- 詳解EMC測試國家標準GB/T 17626
- 電路板上的這些標誌你都知道是什麼含義嗎?
- 個人博客:
www.wangchaochao.top
- 我的公衆號:
mcu149