
其實用QCustomPlot這個庫十分的偶然。以前用過Qwt的,今天有個功能要畫曲線圖,所以就去網上搜下名字,結果找到了這貨。點開網站一看,開源,只需要一個.h和一個.cpp就OK!看了下截圖效果,不錯啊。下下來開用!
用過之后,確實簡單,按照一個例子改吧改吧,半個小時功能搞定!記得原來用qwt時,文檔確實全,但要實現一個稍復雜點的功能就需要翻一大篇兒文檔,而我的英文水平……
廢話一大堆,簡單說下使用方法吧。我要實現的是一個x軸顯示時間,y軸顯示數值的折線圖。
創建圖表控件:
QCustomPlot* plot = new QCustomPlot;
plot->addGraph(); // 添加一個圖表
// 設置關鍵點的顯示效果
plot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, QPen(QColor(41,138,220), 2), QBrush(QColor(5,189,251)), 10));
// 設置x軸顯示時間
plot->xAxis->setTickLabelType(QCPAxis::ltDateTime);
plot->xAxis->setDateTimeFormat("hh:mm"); //時間格式
// 設置軸的標題
plot->xAxis->setLabel("時間");
plot->yAxis->setLabel("溫度");
ui.layout->addWidget(_plot);
更新數據:
// 填充數據
QVector<double> dates, temps;
......
// 更新數據
plot->graph(0)->setData(dates, temps);
// 自動調整軸上值的顯示范圍
plot->rescaleAxes();
// 自定義y軸值的顯示范圍
plot->yAxis->setRange(0,100);
// 重繪
plot->replot();
代碼很簡潔,基本上看著例子就能做出效果來。
說下我遇到的小問題:由于我需要x軸是根據我輸入的值的范圍顯示,而y軸則是一個給定的顯示范圍。比如我給出兩組值:(20150811, 50),(20150812, 60),我想要的效果是x軸起始的時間為20150811,終止時間是20150812,而y軸我卻想要起始值為0,終止值為100,那么就可以先調用rescaleAxes函數,把x軸的起始和終止值都自動調整好,由于rescaleAxes也會影響到y軸,所以再調用setRange單獨設置一下y軸的顯示范圍就OK了。