qwt是用于顯示靜态圖表的,對動态刷新的支持并不好。針對這種情況,有兩種解決方案一(yī),換用qt charts這是qt的原商(shāng)業版組件
qt charts用來創建各種數據圖表/曲線,如下(xià)圖所示。
qt charts的核心是 qchartview(顯示圖表)和qchart(管理數據)。
qchart類用于管理各種數據序列(series),以及圖表相關的對象,如圖例(legend)和坐标軸(axis)
qchart類用來 管理 圖表的數據序列(series)、圖例(legends)和坐标軸(axes)。
qchart繼承自qgraphicswidget類,可以在qgraphicsscene中(zhōng)顯示。qchart管理圖表的不同類型的圖形表示,包括序列,标題和坐标軸。顯示qchat最簡單的方式是使用qchatview。
此外(wài),還可以用qpolarchart(它繼承自qchart)來表示折線圖(line),曲線圖(spline),餅狀圖(area)和散點圖(scatter)。
qchartview是一(yī)個能夠顯示圖表的widget。
其中(zhōng)最重要的一(yī)個函數是:
void qchartview::setchart( qchart *chart)
該函數把qchartview的當前圖表設爲chart,新chart的所有權歸qchartview所有。前一(yī)個chart(如果有)和qchartview的關系解除,必須delete前一(yī)個chart以防止内存洩露。
void qxyseries::replace( qlist < qpointf > points)
void qxyseries::replace( qvector < qpointf > points)
以上兩個函數的速度最快,要比逐點 replace 或 clear + append 新數據要快得多。replace或append是實現動态繪圖的基礎。
而 qvecto r的速度通常比 qlist 更快,前者是内存連續的。
void setname(const qstring &name):設置序列的名字,該名字顯示在序列的 legend 上,支持html格式。
坐标軸的基類是qabstractaxis,軸上的數據時real/double型的。
legend用來給圖标添加圖例。legend不能被創建或删除,但可以隐藏。它可以放(fàng)在圖标的上、下(xià)、左、右,默認在上面。
legend上顯示的名字是對應series的名字,用 qabstractseries::setname(qstring& name)設置。
qt官方文檔:qchart類;
qt官方文檔:qt charts overview;
qtcharts入門 使用qchartview做折線圖
在qt中(zhōng)直接調用excel的com組件可以實現生(shēng)成散點圖,但是可能會遇到一(yī)些問題,比如無法獲得插入的圖表對象。qxlsx庫可以實現讀寫和生(shēng)成xlsx格式的excel表格,包括插入散點圖,但是可能存在一(yī)些限制和不足,比如無法插入x軸坐标數據和不能更改chartstyle。
可以考慮使用qt中(zhōng)支持的qchart系列類庫,生(shēng)成散點圖。qchart是qt5中(zhōng)的新特性,qchart系列類庫封裝了基于qt quick 2d渲染引擎的圖形繪制框架,提供了可視化圖表的功能,支持多種常見的圖表類型(包括散點圖),并提供了高度定制化圖表的接口。這樣就可以在qt中(zhōng)使用原生(shēng)控件實現圖表的可視化和自定義。
下(xià)面是一(yī)個簡單的代碼片段,演示如何使用qchart生(shēng)成散點圖:
```cpp
#include <qtcharts/qchartview>
#include <qtcharts/qscatterseries>
//定義一(yī)個函數用于生(shēng)成散點圖
void generatescatterchart()
{
//創建散點數據
qscatterseries *series = new qscatterseries();
series->setname("散點圖");
//添加數據點
series->append(1, 2);
series->append(3, 4);
series->append(5, 6);
series->append(7, 8);
//創建x軸和y軸
qvalueaxis *xaxis = new qvalueaxis();
xaxis->setlabelformat("%d");
xaxis->settitletext("x軸");
qvalueaxis *yaxis = new qvalueaxis();
yaxis->setlabelformat("%.2f");
yaxis->settitletext("y軸");
//創建圖表并添加散點數據
qchart *chart = new qchart();
chart->addseries(series);
//設置坐标軸
chart->settitle("散點圖");
chart->setaxisx(xaxis, series);
chart->setaxisy(yaxis, series);
//顯示圖表
qchartview *chartview = new qchartview(chart);
chartview->setrenderhint(qpainter::antialiasing);
chartview->show();
}
```
這樣,就可以使用qchart系列類庫,快速方便地生(shēng)成散點圖,并進行高度定制化的圖表展示了。