qcustomplot繪製實時波形圖(頻譜圖、瀑布圖)並開啓opengl支持

先簡單介紹一下,繪製實時數據波形圖,我們一般使用到的庫有qwt、qcustomplot以及官方的QtCharts模塊。

  1. qwt這個庫安裝比較麻煩。不過功能比較全使用的人比較多。
  2. qcustomplot很精簡小巧,就一個.h .cpp文件,但是功能也很強大健全。
  3. QtCharts這個模塊以前是收費使用的,現在已經免費了,官方出品。

今天的主角是qcustomplot,使用的是最新的版本:
下載地址:https://www.qcustomplot.com/

官方提供的demo提供了4個例程,這裏初入手的特別注意範例plot-examples,其包含了多種效果,修改代碼的數字實現不同的demo,如果修改 setupDemo(10);如下圖:是Realtime Data Demo。這個就是繪製實時數據的demo。
在這裏插入圖片描述
在這裏插入圖片描述
官方這個沒有鼠標當前位置的x/y值,有人封裝了一個XCustomPlot類。添加了對鼠標當前位置信息的顯示。然後自己在此基礎上再次修改了一下,。自己對工程進行簡單修改後,修改模擬數據點爲20萬個點一次刷新,刷新時間16ms。看上去還是很流暢的,我們看到沒有開啓opengl支持的情況下,cpu使用25%左右。當然顯示的屏幕越大,cpu佔用率稍微高一點會。
在這裏插入圖片描述
qcustomplot支持opengl繪製,然後我們開啓qcustomplot的opengl。不過需要開啓QT的opengl模塊,同時需要安裝glut庫,由於GLUT的作者已經很久沒更新了(最後更新於2001年!)所以其他人另外做了一個接口兼容GLUT的freeglut庫,開源而且一直在維護中。freeglut是glut的超集,支持glut所有的api,跨平臺(MS-Win,Linux,Mac OS均支持),並且有長期維護,十分可靠。所以我們繼續修改代碼讓其支持opengl能夠利用顯卡加速的功能。需要支持opengl需要進行如下修改:

  1. 在.pro 文件中添加 QT += opengl 模塊支持。
  2. 添加qt中freeglut庫的支持,根據自己是使用msvc還是mingw選擇不同的配置方式。本文的測試demo使用的是MinGW的配置,具體步驟見我的另一篇文章: https://blog.csdn.net/qing666888/article/details/78946384
  3. 完成上述配置後,在工程代碼中XxwCustomPlot構造函數中,調用setOpenGl(true);開啓qcustomplot的opengl模式。下面qDebug是打印當前qcustomplot模式是不是opengl模式。顯示true則表示是opengl模式。
    setOpenGl(true);
    qDebug() << openGl();

開啓後我們再看一下效果,可以看到GPU引擎已經開啓,同時使用率爲20%左右,而上面沒開啓之前則任務欄GPU列無任何顯示:CPU使用率已經下降到20%左右。應爲我的模擬數據是使用CPU在處理的。
在這裏插入圖片描述
源碼,opengl庫可能要根據自己的庫路徑配置一下:
https://download.csdn.net/download/qing666888/12288640
2020-5-9 更新一下開啓opengl大概步驟說明

  1. 把freeglut庫文件丟到工程項目目錄下。.pro文件中增加如下依賴配置。
#qcustomplot使用opengl的宏定義
DEFINES += QCUSTOMPLOT_USE_OPENGL

#依賴freeglut庫以及頭文件
INCLUDEPATH += $$PWD/freeglut/include
LIBS += -L$$PWD/freeglut/lib/x64  -lfreeglut
  1. 在main.cpp文件中添加依賴#include <GL/freeglut.h>。
  2. 在XxwCustomPlot類構造函數中開啓qcustomplot的opengl。
    setOpenGl(true);
    qDebug() << openGl();

2020-6-17 更新,在上面的版本基礎上,自己修改了qcustomplot源碼,完美支持大量數據下的頻譜圖,瀑布圖顯示。由於公司使用的就不發源碼了,如下圖使用了20萬個點的模擬數據,CPU佔用13%左右,數據量應該還有提升空間,說下大概思路,就是重寫qcustomplot的插入數據的接口,頻譜圖瀑布圖都全部使用它內部的內存指針進行數據的批量拷貝賦值,而不像它原來的接口一個一個賦值效率太低了,數據稍微一多就非常卡。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章