Qt Charts基本组成
簡述
Qt Charts API 構建在 Qt Graphics View 框架之上,可以使用 QChart 類將圖表顯示為 QGraphicsWidget。但還有一個方便的類 - QChartView,可以作為一個獨立的窗口,可以更方便的構建圖表,不需要與 QGraphicsScene 一起使用。
所有的圖表類型均由 QAbstractSeries 派生類表示。要創建圖表,必須使用相關 series 類的實例,并將其添加到 QChart。
- 簡述
- Qt Charts API
- 圖表類型
- 坐標軸
- 圖例和圖例標記
- 模型映射器
- Set
- 更多參考
版權所有:一去丶二三里,轉載請注明出處:http://blog.csdn.net/liang19890820
Qt Charts API
要使用 Qt Charts,必須先了解其基本組成部分,以及各部分所關聯的類及接口。
按照功能分類(層級關系表示繼承性):
QChartView
繼承自 QGraphicsView,是獨立的圖表窗口。-
QChart (繼承自 QGraphicsWidget,是 Qt Charts 的主要圖表 API)
- QPolarChart (Qt Charts 的極坐標圖 API)
可以通過以下兩種方式來顯示圖表:
QChartView + QChart
QChartView 作為一個獨立的圖表窗口,用于顯示圖表(QChart),不需要與 QGraphicsScene 一起使用。
QGraphicsScene + QChart
如果要在現有的 QGraphicsScene 中顯示圖表,則需要使用 QChart(或 QPolarChart)類。
這樣理解可能更為簡單:
QGraphicsView 提供了視圖部件,QChartView 功能與其相同(因為繼承自 QGraphicsView),用于顯示圖表(QChart)。
QGraphicsScene 提供了圖形場景,用于管理大量圖元,既然可以管理 QGraphicsWidget,必然可以管理 QChart(因為 QChart 繼承自 QGraphicsWidget)。
圖表類型
QAbstractSeries 繼承自 QObject,是所有 Qt Chart series 的基類。
通常使用其特定的繼承類而非基類,例如:柱狀圖、面積圖、箱形圖、餅圖、線性圖、曲線圖、散點圖。
以 QBoxPlotSeries 箱形圖為例:
- QAbstractSeries
- QAbstractBarSeries (所有 Bar series 柱狀圖/條形圖的基類)
- QBarSeries (用于創建柱狀圖)
- QHorizontalBarSeries (用于創建水平柱狀圖)
- QHorizontalPercentBarSeries (用于創建水平百分比柱狀圖)
- QHorizontalStackedBarSeries (用于創建水平層疊圖)
- QPercentBarSeries (用于創建百分比柱狀圖)
- QStackedBarSeries (用于創建層疊圖/堆疊的條形圖)
- QAreaSeries (用于創建面積圖)
- QBoxPlotSeries (用于創建箱形圖/盒須圖)
- QPieSeries (用于創建餅圖)
- QXYSeries (線性圖、曲線圖、散點圖的基類)
- QLineSeries (用于創建折線圖)
- QSplineSeries (用于創建曲線圖)
- QScatterSeries (用于創建散點圖)
- QLineSeries (用于創建折線圖)
- QAbstractBarSeries (所有 Bar series 柱狀圖/條形圖的基類)
對于餅圖 QPieSeries 來說,會用到:
- QPieSlice (繼承自 QObject,定義 QPieSeries 中的切片)
坐標軸
QAbstractAxis 繼承自 QObject,用于操作圖表的軸。可以單獨控制各種軸元素的屬性和可見性,例如:軸線、標題、標簽、網格線和陰影。
每個 series 可以綁定到一個或多個水平軸和垂直軸,但不支持混合軸類型,例如:在相同方向上指定 QValueAxis 和 QLogValueAxis。
- QAbstractAxis
- QBarCategoryAxis (在刻度線之間繪制類別)
- QDateTimeAxis (以適當的 DateTime 格式來配置標簽)
- QLogValueAxis (被附加到具有一個或多個點的 series)
- QValueAxis (在刻度所在位置繪制軸的值)
- QCategoryAxis (允許在軸上放置命名范圍)
圖例和圖例標記
- QLegend (圖例 - 繼承自 QGraphicsWidget)
- QLegendMarker (圖例標記 - 繼承自 QObject,用于訪問 QLegend 內的標記的抽象對象)
圖例標記由兩部分組成:
- 彩色框:反映 series 的顏色
- 標簽:顯示 series 的名稱
注意: QLegendMarker 始終與一個 series 相關
- QLegendMarker
- QAreaLegendMarker (用于 QAreaSeries 的 QLegendMarker 子類)
- QBarLegendMarker (用于 QAbstractBarSeries 的 QLegendMarker 子類)
- QBoxPlotLegendMarker (用于 QBoxPlotSeries 的 QLegendMarker 子類)
- QPieLegendMarker (用于 QPieSeries 的 QLegendMarker 子類)
- QXYLegendMarker (用于 QXYSeries 的 QLegendMarker 子類)
模型映射器
Model Mapper - 模型映射器,允許使用由 QAbstractItemModel 派生的模型作為 chart series 圖表系列的數據源。
例如:QHBarModelMapper,用于創建 QAbstractBarSeries 和 QAbstractItemModel 派生模型對象之間的連接
- QHBarModelMapper (用于 QAbstractBarSeries 的水平模型映射器)
- QVBarModelMapper (用于 QAbstractBarSeries 的垂直模型映射器)
- QVBoxPlotModelMapper (用于 QBoxPlotSeries 的垂直模型映射器)
- QHPieModelMapper (用于 QPieSeries 的水平模型映射)
- QVPieModelMapper (用于 QPieSeries 的垂直模型映射器)
- QHXYModelMapper (用于 QXYSeries 的水平模型映射器)
- QVXYModelMapper (用于 QXYSeries 的垂直模型映射器)
Set
Set 主要包含:
- QBarSet (繼承自 QObject,不同 QAbstractBarSeries 的構建單元)
- QBoxSet (繼承自 QObject,QBoxPlotSeries 的構建單元)
Set 顧名思義,就是提供了一組數據。也就是說,當需要顯示一組柱狀圖或者箱形圖時,需要用到他們。
// 構建不同的 QAbstractBarSeries QBarSet *set0 = new QBarSet("Jane"); QBarSet *set1 = new QBarSet("John"); QBarSet *set2 = new QBarSet("Axel"); QBarSet *set3 = new QBarSet("Mary"); QBarSet *set4 = new QBarSet("Samantha");*set0 << 1 << 2 << 3 << 4 << 5 << 6; *set1 << 5 << 0 << 0 << 4 << 0 << 7; *set2 << 3 << 5 << 8 << 13 << 8 << 5; *set3 << 5 << 6 << 7 << 3 << 4 << 5; *set4 << 9 << 7 << 5 << 3 << 1 << 2;// 柱狀圖 QBarSeries *series = new QBarSeries(); series->append(set0); series->append(set1); series->append(set2); series->append(set3); series->append(set4);Y 軸的范圍是:0.0 - 13.0。以 set2(橙色柱狀圖)為例,分別為其中添加 3、5、8、13、8、5 共六組數,當顯示圖表時,可以看出橙色柱狀圖的高度正是所對應的縱坐標。
更多參考
想必對于 Qt Charts 基本組成有了一個簡單的認識了,來做一個簡單的小結:
可視化部件包含:
QChartView - 繼承自 QGraphicsView,是獨立的圖表窗口。
-
QChart - 繼承自 QGraphicsWidget,是 Qt Charts 的主要圖表 API。
- QPolarChart - Qt Charts 的極坐標圖 API。
QLegend - 繼承自 QGraphicsWidget,用于顯示圖例。
其它類及接口主要為可視化部件提供相應的數據源,以及交互控制功能。
注意:并非所有的類都是可視化的。
總結
以上是生活随笔為你收集整理的Qt Charts基本组成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【云中沙箱】视频直播技术浅析与实践!
- 下一篇: java开发_数字转换汉语中人民币的大写