文章首发自公众号:: nullobject 。
我的站点: https://www.nullobject.cn
这篇文章主要讲解QAbstractSeries的API及其使用。
理解本文章内容以前,须要读者对Qt Charts的基本组成有个总体认识,具体能够参考这篇文章:Qt Charts 基本组成。Qt Charts主要由QChartView、QChart、QLegend图例、坐标轴(由QAbstractAxis子类实现)、数据源(由QAbstractSeries子类实现)等组成:函数
由上图可知,Qt Charts图表中,数据的最终呈现主要由QAbstractSeries及其派生类负责(上图为QLineSeries),一般在实际开发中都是直接使用QAbstractSeries的派生类来实现功能。QAbstractSeries做为Qt Charts模块中全部数据序列类(Q*Series)的基类,与其子类的继承关系大体以下:性能
Tips:因为QAbstractSeries的子类及其子类的子类数目众多,这里只大体列出了从QAbstractSeries<--QXYSeries<--QLineSeries的继承关系,详情能够参考上文提到的文章连接以及Qt官方文档。
能够看到,以QLineSeries
为例,QLineSeries继承自QXYSeries
,而QXYSeries正是继承自QAbstractSeries
类,同时经过学习QLineSeries相关文档和源码了解到,QLineSeries的功能实现几乎都继承于其父类QXYSeries和QAbstractSeries类,所以。要想熟练使用QLineSeries,实现美丽的折线图,学习理解QXYSeries和QAbstractSeries类的API是必须的,本文主要介绍QAbstractSeries。学习
QString name;大数据
获取和设置series名称,即QAbstractSeries所表示的图形图例名称,支持HTML格式的文本。spa
获取series图例名称。.net
设置series图例名称。当图例名称发生改变时,会触发QAbstractSeries的nameChanged()
信号。指针
bool useOpenGL;code
获取和设置series是否开启OpenGL加速。对象
获取是否开启OpenGL加速。blog
设置开启/关闭OpenGL加速渲染,默认关闭。该选项发生改变时会触发QAbstractSeries的useOpenGLChanged()
信号。
Tips : 在不开启OpenGL加速就能知足性能要求且对该选项带来的 反作用不熟悉的状况下, 建议不要开启OpenGL加速!
当须要绘制大数据量的图表序列时,开启OpenGL加速以后series的绘制性能显著提高。可是Qt Charts实现的OpenGL加速(依托QOpenGLWidget组件实现)迄今为止仍存在一些问题,好比MDI程序环境下,开启了OpenGL加速的图表序列会被置顶于全部MDI子窗口之上,形成图表重叠错乱的问题:
并且,目前只有QLineSeries和QScatterSeries两种类型的图表支持开启OpenGL绘制,且当QLineSeries做为面积图QAreaSeries的边缘线时也不能开启OpenGL。所以,慎重开启此选项!
qreal opacity;
获取和设置图表序列显示的透明度。
获取series当前设置的透明度。
设置series显示的透明度,设置范围:全透明0.0~1.0不透明,该属性值发生改变时会触发opacityChanged()
信号。
bool visible;
获取和设置是否显示当前图表。
获取是否显示当前图表;
设置是否显示当前图表,该属性值发生改变时会触发visibleChanged()
信号。
const SeriesType type;
该属性表明当前图表序列series的类型,QAbstractSeries中声明了一个纯虚函数用于操做该属性:
virtual QAbstractSeries::SeriesType type() const = 0;
QAbstractSeries的子类须要手动实现该函数并返回对应的图表类型。SeriesType
是一个枚举类,描述了Qt Charts当前支持的图表类型:
QAbstractSeries主要的公有方法有:
附加坐标轴到图表序列series,附加成功时返回true,不然返回false:
// 建立横、纵坐标轴 QValueAxis *axisX = new QValueAxis; QValueAxis *axisY = new QValueAxis; // 设置坐标轴颜色 axisX->setLinePen(QPen(Qt::blue)); axisY->setLinePen(QPen(Qt::blue)); // 设置坐标轴刻度线颜色和宽度 QPen pen(Qt::black); pen.setWidth(1); axisX->setGridLinePen(pen); axisY->setGridLinePen(pen); // 添加坐标轴到QChart组件 chart->addAxis(axisX,Qt::AlignBottom); chart->addAxis(axisY,Qt::AlignLeft); // 设置显示刻度范围 axisX->setRange(0,25); axisY->setRange(0,15); // 附加坐标系到图表序列series series->attachAxis(axisX); series->attachAxis(axisY);
效果:
当同一方向上有多个坐标轴同时依附到同一个图表序列上时,这些坐标轴将会被设置为相同的刻度范围,且通过实践证实,自动调整后的刻度范围是最后被依附到图标序列的坐标轴刻度范围:
//增长第二条个横纵坐标系 QValueAxis *axisX1 = new QValueAxis; QValueAxis *axisY1 = new QValueAxis; axisX1->setRange(-5,15); axisY1->setRange(0,5); chart->addAxis(axisX1,Qt::AlignBottom); chart->addAxis(axisY1,Qt::AlignLeft); //将两个坐标系依附到图标序列series series->attachAxis(axisX1); series->attachAxis(axisY1);
效果:
获取图表序列当前依附的全部坐标轴集合:
// 打印上一步中依附到series的全部坐标轴集合 qDebug() << "attached axes:" << series->attachedAxes();
结果:
获取当前图表序列series所属的QChart组件。经过QChart::addSeries()
方法将series添加到QChart组件后能够经过此方法获取series被添加到的QChart对象指针。
从当前图表序列分离坐标轴。