Data Visualization 是 Qt 提供的用于數據三維顯示的模塊。在 Qt 5.7 以前只有商業版才有此模塊,而從Qt5.7 開始此模塊在社區版本里也可以免費使用了。Data Visualization 用于數據的三維顯示,包括三維柱狀圖、三維空間散點、三維曲面等。Data Visualization 與 Qt Charts 類似,也是基于Qt的圖形視圖架構。Data Visualization 的功能無法和一些專業的三維顯示類庫相提并論,但是對于一些簡單的三維數據顯示是比較實用的,例如一些科學計算結果的三維顯示。
本章介紹 Data Visualization 模塊的一些主要功能的使用,主要是三維柱狀圖、三維空間散點和三維曲面的顯示。
文章目錄
- 1. DataVisualization 模塊概述
- 2. 利用 DataVisualization 模塊實現數據三維顯示
1. DataVisualization 模塊概述
Data Visualization 的三維顯示功能主要由 3種三維圖形類來實現,分別是三維柱狀圖類Q3DBars,三維空間散點類Q3DScatter,三維曲面類Q3DSurface。這3 個類的父類是 QAbstract3DGraph,是從QWindow 繼承而來的,繼承關系如圖10-1 所示。
Data Visualization與 Qt Charts 類似,都基于 Qt 的圖形視圖結構,所以一個三維圖形也是由圖表、序列、坐標軸等元素組成的。Q3DBars、Q3DScatter、Q3DSurface 相當于 Qt Charts 中的QChart,而每一種三維圖形對應一種三維序列,Data Visualization 中的3種序列類見圖10-2
一種序列類只能用于某種三維圖形類,如QBar3DSeries只能用作三維柱狀圖Q3DBars 的序列而不能作為三維散點圖 Q3DScatter 的序列。在一個圖中可以有多個同類型的序列,如三維曲面圖Q3DSurface 中可以有多個 QSurface3DSeries 序列,用于顯示不同的曲面。
與QChart 有坐標軸類一樣,三維圖形也有坐標軸類。有兩種三維坐標軸類,QValue3DAxis用于數值型坐標軸,QCategory3DAxis 用于文字型坐標軸,它們都繼承自 QAbstract3DAxis(如圖 10-3 所示)
Data Visualization 模塊中有數據代理(data proxy)類,數據代理類就是與序列對應,用于存儲序列的數據的類。因為三維圖形類型不一樣,存儲數據的結構也不一樣,例如三維散點序列 QSatter3DSerics 存儲的是一些三維數據點的坐標,只需要用一維數組或列表就可以存儲這些數據,而QSurface3DSeries 序列存儲的數據點在水平面上是均勻網格分布的,需要二維數組才可以存儲相應的數據。為此,對于每一種序列,都有一個數據代理類,它們都繼承自QAbstractDataProxy,每個數據代理類還有一個基于項數據模型的數據代理子類(如圖 10-4 所示)。
對于三維曲面序列 QSurface3DSeries,還有一個專門用于顯示地圖高程數據的數據代理類QHeightMapSurfaceDataProxy,可以將一個圖片表示的高程數據顯示為三維曲面。用戶也可以根據需要從QAbstractDataProxy 繼承,定義自己的數據代理類。
要在項目中使用 Data Visualization 模塊,需要在項目配置文件中添加下面一行語句:
Qt += datavisualization
在使用 Data Visualization 模塊中的類的頭文件或源程序文件中,還需要加入下面兩行語句。如果只需使用模塊中的部分類,可以單獨包含某些類。
#include <QtDataVisualization>
using namespace QtDataVisualization;
2. 利用 DataVisualization 模塊實現數據三維顯示
利用 DataVisualization 模塊實現三維柱狀圖、三維散點圖、三維曲面繪圖、三維地形圖實例需結合對應實例學習使用。