版权声明:进步始于交流,收获源于分享!纯正开源之美,有趣、好玩、靠谱。。。作者:一去丶二三里 博客地址:http://blog.youkuaiyun.com/liang19890820
简述
Qt Charts API 构建在 Qt Graphics View 框架之上,可以使用 QChart 类将图表显示为 QGraphicsWidget。但还有一个方便的类 - QChartView,可以作为一个独立的窗口,可以更方便的构建图表,不需要与 QGraphicsScene 一起使用。
所有的图表类型均由 QAbstractSeries 派生类表示。要创建图表,必须使用相关 series 类的实例,并将其添加到 QChart。
版权所有:一去丶二三里,转载请注明出处:http://blog.youkuaiyun.com/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 顾名思义,就是提供了一组数据。也就是说,当需要显示一组柱状图或者箱形图时,需要用到他们。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
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,用于显示图例。
其它类及接口主要为可视化部件提供相应的数据源,以及交互控制功能。
注意:并非所有的类都是可视化的。