Qt使用QtCharts畫滾動動態曲線

2021-10-05 19:25:13 字數 3615 閱讀 6467

1. qt畫圖太難了呀?

qt雖屬於圖形使用者介面應用程式開發框架,但是不提供例如matlab以及python的plot介面,這使得qt的繪圖顯得比較繁瑣,但是沒有整合化的介面使用,qt也提供了畫圖的物件,相比於plot庫,我們需要例項化乙個畫圖物件,配置座標軸、繫結資料以及將圖表加入視窗顯示。雖說較為繁瑣,但是靈活性也更高☀️ 。

2. qtcharts圖表元件?

過去聽說我也沒用過? 

,qt官方並沒有提供畫圖的庫需要安裝第三方的qcustomplot功能不全

和qwt安裝麻煩

圖2-1 qt安裝元件選項介面

3. qtcharts畫二維曲線圖步驟

3.1 修改.pro檔案

值得注意的是,qtcharts並不是qt的預設核心元件,使用qtcharts我們需要修改.pro工程檔案,新增引用qtcharts的指令碼。

qt       += core gui

# 新增如下指令碼

qt +=charts

3.2 使用命名空間
unknown type name 'qchart'
錯誤的原因主要是沒有使用相對應的命名空間,這時候有些同學就要扛了,我使用全稱不久行了嘛?當然也可以!但是使用命名空間會顯得**沒那麼臃腫。在標頭檔案中加入如下「巨集」[1]

qt_charts_use_namespace
[1] 不知道匯入命名空間的語句屬於啥?? 

3.3 初始化qchart

qchart屬於圖表本身,qchartview是圖表展示的載體 (編不下去了,我也不懂為啥要這樣分,使用得不深,有待研究)。

初始化qchart主要做如下幾個配置,注意:不是必須的,你預設也可能?‍♀  沒啥問題。

splineseries = new qsplineseries();

qpen pen(0x000001);

pen.setwidth(1);

splineseries->setpen(pen); //設定畫筆顏色和大小

scatterseries = new qscatterseries();

scatterseries->setmarkersize(5); //設定散點大小

scatterseries->setcolor(0x0000ff); //設定散點顏色

chart = new qchart();

chart->addseries(splineseries); //新增資料來源

chart->addseries(scatterseries); //新增資料來源

chart->legend()->hide(); //關閉圖例

chart->settitle("實時動態曲線");

chart->createdefaultaxes();

//設定x軸,此類方式已經被棄用(不推薦,會報警告,但可讀性更高)

// chart->axisx()->setrange(0, maxx);

// chart->axisx()->setgridlinevisible(false);

// chart->axisx()->settitletext("x軸");

//設定y軸

// chart->axisy()->setrange(0, maxy);

// chart->axisy()->setgridlinevisible(false);

// chart->axisy()->settitletext("y軸");

//上述方式已經被下面這種方式代替(推薦,不會報警告,但可讀性不高)

chart->axes(qt::horizontal).back()->setrange(0, maxx);

chart->axes(qt::horizontal).back()->setgridlinevisible(false);

chart->axes(qt::horizontal).back()->settitletext("x軸");

chart->axes(qt::vertical).back()->setrange(0, maxy);

chart->axes(qt::vertical).back()->setgridlinevisible(false);

chart->axes(qt::vertical).back()->settitletext("y軸");

第一種方式設定軸會報出警告,當然如下警告問題不大,但是不適合長期使用。

warning:'axisx' is deprecated.		//該功能被棄用了,雖說被棄用,只是說官方不推薦,還可以用
3.4 初始化qchartview

最基本的qchartview初始化非常簡單,只需要利用已初始化的qchart例項化乙個qchartview即可:

//為chart物件例項化乙個qchartview

chartview = new qchartview(chart);

3.5 將qchartview加入視窗

qchartview並不是qt的基本控制項,需要依賴於基本空間顯示,我們使用的是mainwindow視窗中自帶的widget顯示我們的圖表:

qhboxlayout *layout = new qhboxlayout();

layout->addwidget(chartview);

ui->centralwidget->setlayout(layout);

至此,我們的圖表就可以展示出來啦,但是我的**還沒有往資料集合中新增資料,所以不會出現資料曲線,大家注意!

4. 模擬滾動動畫

所謂的滾動動畫,其實就是刪除頭資料,整體資料前移乙個單位,尾插入最新的資料。我們可以使用刪除操作更方便的鍊錶進行資料儲存。由於qchart之前已經繫結了資料集合,此時我們修改圖表資料只需要修改對應的資料集合即可,無須進行重新整理頁面操作。為了更好的演示滾動動畫,我們引用了定時器,設定定時器200ms即發出訊號,呼叫對應的槽函式。

啟動定時器:

//初始化定時器,100ms定時一次

timerid = starttimer(300);

槽函式:

void mainwindow::timerevent(qtimerevent *event)

//清空資料

splineseries->clear();

scatterseries->clear();

//以1為步長

for (int i = 0; i < data.size(); ++i) }}

5.源**

提取碼:urz0

Qt Charts編譯和使用

在這篇文章中,安裝了32位和64位的qt版本。在qt5.7以後版本自帶qt charts模組,可以免費使用,這個開源的版本只支援qt5.4或更新版本。網上有很多部落格講解編譯和使用,比如利用qt creator編譯 利用vs命令提示符編譯 64位在安裝qt的時候已經選擇了qt charts模組,可以...

QtCharts的簡單用法(1) Qt

繼qwt qcustomplot繪製折線圖之後,在qt5.7版本後將qt charts加入到了qt模組中。我們可以方便的使用這個模組,不用學複雜的qwt了。qt charts可以繪製很多樣式的圖形,比如折線 餅圖等,可以根據qt自帶的示例來看,可以幫助更快的做出效果。用qt charts繪製,大概分...

Qt畫平滑曲線

初學qt繪圖,使用drawling 繪製的直線在兩端點間距離較小時總是出現折點 鋸齒 非常不美觀。後來發現使用qpainter setrenderhint qpainter antialiasing 能消除鋸齒。setrenderhint用於設定呈現樣式,antialiasing是反鋸齒。例 qpa...