點擊上方藍字可直接關注!方便下次閱讀。如果對你有幫助,可以點個在看,讓它可以幫助到更多同志~
一、概述
最近被新型肺炎搞得惶惶不可終日,眼看着人數一天天的攀升,直接看數據沒有直觀的感受,所以將數據圖表化。
說做就做,以黑龍江省爲例,我們在黑龍江省衛健委可以查看到每天的數據,如下:
有了這些數據後,可以通過Qt的QChart模塊將數據圖表化,之前的文章舉過條形圖的示例。這次在之前的基礎上使用折線圖來體現。
Ok,接下來就是要將衛健委網頁上的數據存起來,然後讀取這些數據再繪製折線圖。是直接存成文本文件還是存成excel呢?文本文件存儲方便,但是進行數據解析以及個人閱讀不方便;存成excel是我不會這個功能。。想了3秒鐘,決定存成excel。於是在網上查找Qt如何讀取excel數據,一頓操作猛如虎,資料就是無法用,而且還是2016年的資料,現在可是0202年了啊。發個牢騷而已,任務還是要完成的。又一頓操作,還真可以,而且不用下載其他軟件,也無需使用第三方庫,是一個pri工程。下面是如何操作了。
二、程序環境搭建
1. QtCharts 環境搭建
參考之前的文章Qt 2D數據可視化之 QCharts
2. Qt 讀取excel cell環境搭建
資源鏈接 https://github.com/QtExcel/QXlsx
下載解壓後是下面這樣:
1 是使用例子,2是pri模塊。
1的運行效果如下
程序先是創建了一個Test.xlsx文件,然後讀取cell 1行1列中的內容,控制檯輸出如下。如何包含pri模塊可以參考1例子。
三、程序編寫
1. Excel 數據如下
左上角第一個cell座標爲(1, 1),使用的數據是圖中框起來的確診和新增確診病例
2. 導入.pri 及charts模塊
include(../QXlsx/QXlsx.pri),可以參考例子中的
QT += charts
3. 折線圖的設置
過程可以參考之前的柱狀圖。
①設置折線相關屬性
QLineSeries *m_confirmSeries;
m_confirmSeries = new QLineSeries();
m_confirmSeries->setName(tr("確診")); //設置圖例
m_confirmSeries->setPen(QPen(Qt::red, 3)); //設置線條寬度及顏色
②讀取xlsx 文件cell內容
Document xlsxR("E:\\MyQtProject\\2019nCov\\HLJ2019-nCov\\HLJ2019-nCov.xlsx");
if ( xlsxR.load() ) // 加載excel 文件
{
for(int i=0; i<10;i++)
{
int confirmRow = i + 7; int confirmCol = 3; //確診人數
int increaseConfirmRow = i + 7; int increaseConfirmCol = 5; //新增確診
Cell* confirmCell = xlsxR.cellAt(confirmRow, confirmCol); // 獲得cell指針
Cell* increaseConfirmCell = xlsxR.cellAt(increaseConfirmRow, increaseConfirmCol);
if ( confirmCell != nullptr )
{
// read cell value (number(double), QDateTime, QString ...)
QVariant confirmVar = confirmCell->readValue();
QVariant increaseConfirmVar = increaseConfirmCell->readValue();
②~將cell內容填充到折線數據中
m_confirmSeries->append(i+1, confirmVar.toInt()); //爲折線填充數據
m_increaseConfirmSeries->append(i+1, increaseConfirmVar.toInt());
}
else
{
qDebug() << "[debug] cell is not set.";
}
}
}
③將之前的折線添加到QChart中
QChart *chart = new QChart();
chart->addSeries(m_confirmSeries); //向chart添加折線圖
chart->addSeries(m_increaseConfirmSeries);
chart->createDefaultAxes(); //創建默認座標軸
chart->setTitle("2019-nCov");
④將之前的Chart添加到QChartView 中
QChartView *chartView = new QChartView(chart); //將chart添加到View中
chartView->setRenderHint(QPainter::Antialiasing);//設置抗鋸齒方式
最終效果如下:
橫座標是從25日開始,之後順次加1天;縱座標是人數
四、疫情總結
在家待著別亂跑!
以史爲鑑可以知興替。
學不可以已!
如需完整工程可在公衆號後臺留言
歡迎大家關注公衆號: