Qt Charts API 构建在 Qt Graphics View 框架之上,可以使用 QChart 类将图表显示为 QGraphicsWidget。但还有一个方便的类 - QChartView,可以作为一个独立的窗口,可以更方便的构建图表,不需要与 QGraphicsScene 一起使用。
所有的图表类型均由 QAbstractSeries 派生类表示。要创建图表,必须使用相关 series 类的实例,并将其添加到 QChart。
简述Qt Charts API图表类型坐标轴图例和图例标记模型映射器Set更多参考版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820
要使用 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 (用于创建散点图)对于饼图 QPieSeries 来说,会用到:
QPieSlice (继承自 QObject,定义 QPieSeries 中的切片)QAbstractAxis 继承自 QObject,用于操作图表的轴。可以单独控制各种轴元素的属性和可见性,例如:轴线、标题、标签、网格线和阴影。
每个 series 可以绑定到一个或多个水平轴和垂直轴,但不支持混合轴类型,例如:在相同方向上指定 QValueAxis 和 QLogValueAxis。
QAbstractAxis QBarCategoryAxis (在刻度线之间绘制类别) QDateTimeAxis (以适当的 DateTime 格式来配置标签) QLogValueAxis (被附加到具有一个或多个点的 series) QValueAxis (在刻度所在位置绘制轴的值) QCategoryAxis (允许在轴上放置命名范围)图例标记由两部分组成:
彩色框:反映 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 主要包含:
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,用于显示图例。
其它类及接口主要为可视化部件提供相应的数据源,以及交互控制功能。
注意:并非所有的类都是可视化的。
相关资源:敏捷开发V1.0.pptx