文章目录
- 一、前言
- 二、库结构
- 三、图层
- 3.1、坐标轴层
一、前言
学习一个陌生的库,我们首先要明确它有什么用,可以结合库官方examples,学习怎么简单的用。
但是如果要对该库有一个全面的认识,还是需要了解它的开发思路和库结构。
例如:在学习QWT时,首先明确它是基于图形视图框架思路进行开发的,然后明白视图坐标系的组成,图元的继承关系等等
二、库结构
我们从官网下载的QCustomPlot文件夹如下所示:
打开【documentation】–> 【html】–> 【index.html】
切换到【Class Overview】,可以看到两张图:
第一张是:类关系图表
QCustomPlot
是一个图表:包含一个或多个图层、一个或多个item
(例如文本、线段等)、一个或多个可以绘制的元素、一个布局;QCPLayer
是一个图层:包含基本的元素(QCPLayerable
);QCPAbstractItem
是标识图元虚基类;QCPAbstractPlottable
是数据展示图元虚基类;QCPLayoutGrid
是一个网格布局,可以插入QCPLayoutElement
元素(文本元素QCPTextElement
、坐标轴矩形QCPAxisRect
)
第二张是:类继承树
在一个QCustomPlot
类图中,最重要且用的最多的是QCPLayerable
元素,几乎除了QCPLayer
以外的元素都是继承自该类;
QCPAbstractPlottable
:数据展示图元,包含:QCPGraph
(折线图)、QCPCurve
(曲线图)、QCPBars
(柱状图)、QCPStatiBox
(盒子图)、QCPColorMap
(色谱图)、QCPFinancial
(金融图);QCPAbstractItem
:标识图元,包含:直线(QCPItemStraightLine
)、线段(QCPItemLine
)、曲线(QCPItemCurve
)、矩形(QCPItemRect
)、椭圆(QCPItemEllipse
)、文本(QCPItemText
)、小圆球(QCPItemTracer
)、图片(QCPItemPixmap
)、括弧(QCPItemBracket
);QCPLayoutElement
:布局项;QCPGrid
:网格线,每一个坐标轴对应一个网格线;QCPAxis
:坐标轴,一个坐标轴矩形包含四个坐标轴,上下左右四个坐标轴;
三、图层
QCustomPlot2.0.0beta版本以后,新增了分层绘制机制。所谓分层绘制就是把一张图分几张图来绘制,最后在把这分开的几张图统一绘制到一张图上,比如一张图A,需要分开成3张图B、C和D来绘制,当图A需要重新绘制时,我们一次判断B、C和D是否需要重新绘制,如果不需要绘制的我们直接把图贴到A上,那就很大的减少了重新绘制的时间,而这部分时间其实是没有必要花费的。
QCustomPlot
是一个图表,管理着所有的图层,它默认自带了六个图层,分别是:
- 背景层:background,绘制背景图;
- 网格层:grid,绘制网格线,每一个坐标轴对应一个网格对象;
- 绘图层:main,绘制图表;
- 坐标轴层:axes,绘制坐标轴;
- 图例层:legend,绘制图例;
- overlay层:overlay,绘制最上层的东西,鼠标选择矩形框在此层绘制;
mLayers.append(new QCPLayer(this, QLatin1String("background")));
mLayers.append(new QCPLayer(this, QLatin1String("grid")));
mLayers.append(new QCPLayer(this, QLatin1String("main")));
mLayers.append(new QCPLayer(this, QLatin1String("axes")));
mLayers.append(new QCPLayer(this, QLatin1String("legend")));
mLayers.append(new QCPLayer(this, QLatin1String("overlay")));
上述六个层,唯一值得重点介绍的应该是坐标轴层,因为后期绘图,主要就是和坐标轴打交道;
3.1、坐标轴层
坐标轴类零件命名规范:
定义轴几何形状的间距和填充的概述:
左边的灰色虚线表示QCustomPlot小部件边框