Qt Charts之QAbstractSeries类

栏目: 编程工具 · 发布时间: 5年前

内容简介:这篇文章主要讲解QAbstractSeries的API及其使用。​ 理解本文章内容之前,需要读者对Qt Charts的基本组成有个整体认识,具体可以参考这篇文章:

这篇文章主要讲解QAbstractSeries的API及其使用。

0x00 写在前面:Qt Charts的组成结构

​ 理解本文章内容之前,需要读者对Qt Charts的基本组成有个整体认识,具体可以参考这篇文章: Qt Charts 基本组成 。Qt Charts主要由QChartView、QChart、QLegend图例、坐标轴(由QAbstractAxis子类实现)、 数据源(由QAbstractSeries子类实现) 等组成:

Qt Charts之QAbstractSeries类

0x01 QAbstractSeries类

​ 由上图可知,Qt Charts图表中,数据的最终呈现主要由 QAbstractSeries及其派生类 负责(上图为QLineSeries),通常在实际开发中都是直接使用QAbstractSeries的派生类来实现功能。QAbstractSeries作为Qt Charts模块中所有数据序列类(Q * Series)的基类,与其子类的继承关系大致如下:

Qt Charts之QAbstractSeries类

Tips:由于QAbstractSeries的子类及其子类的子类数目众多,这里只大致列出了从QAbstractSeries<--QXYSeries<--QLineSeries的继承关系,详情可以参考上文提到的文章链接以及Qt官方文档。

可以看到,以 QLineSeries 为例,QLineSeries继承自 QXYSeries ,而QXYSeries正是继承自 QAbstractSeries 类,同时通过学习QLineSeries相关文档和源码了解到,QLineSeries的功能实现几乎都继承于其父类QXYSeries和QAbstractSeries类,因此。要想熟练使用QLineSeries,实现美丽的折线图,学习理解 QXYSeriesQAbstractSeries 类的API是必须的,本文主要介绍QAbstractSeries。

0x02 QAbstractSeries属性

  • QString name;

    获取和设置series名称,即QAbstractSeries所表示的图形图例名称,支持HTML格式的文本。

    • QString name() const;

      获取series图例名称。

    • void setName(const QString &name);

      设置series图例名称。当图例名称发生改变时,会触发QAbstractSeries的 nameChanged() 信号。

Qt Charts之QAbstractSeries类

  • bool useOpenGL;

    获取和设置series是否开启OpenGL加速。

    • bool useOpenGL() const;

      获取是否开启OpenGL加速。

    • void setUseOpenGL(bool enable=true);

      设置开启/关闭OpenGL加速渲染,默认关闭。该选项发生改变时会触发QAbstractSeries的 useOpenGLChanged() 信号。

    Tips : 在不开启OpenGL加速就能满足性能要求且对该选项带来的 副作用 不熟悉的情况下, 建议不要开启OpenGL加速!

当需要绘制大数据量的图表序列时,开启OpenGL加速之后series的绘制性能显著提升。但是Qt Charts实现的OpenGL加速(依托QOpenGLWidget组件实现)迄今为止仍存在一些问题,比如 MDI 程序环境下,开启了OpenGL加速的图表序列会被置顶于所有MDI子窗口之上,造成图表重叠错乱的问题:

Qt Charts之QAbstractSeries类

而且, 目前只有QLineSeries和QScatterSeries两种类型的图表支持开启OpenGL绘制 ,且当QLineSeries作为面积图QAreaSeries的边缘线时也不能开启OpenGL。因此,慎重开启此选项!

  • qreal opacity;

    获取和设置图表序列显示的透明度。

    • qreal opacity() const;

      获取series当前设置的透明度。

    • void setOpacity(qreal opacity);

      设置series显示的透明度,设置范围: 全透明0.0~1.0不透明 ,该属性值发生改变时会触发 opacityChanged() 信号。

      Qt Charts之QAbstractSeries类

      Qt Charts之QAbstractSeries类

  • bool visible;

    获取和设置是否显示当前图表。

    • bool isVisible() const;

      获取是否显示当前图表;

    • void setVisible(bool visible = true) ;

      设置是否显示当前图表,该属性值发生改变时会触发 visibleChanged() 信号。

  • const SeriesType type;

    该属性代表当前图表序列series的类型,QAbstractSeries中声明了一个纯虚函数用于操作该属性:

    virtual QAbstractSeries::SeriesType type() const = 0;

    QAbstractSeries的子类需要手动实现该函数并返回对应的图表类型。 SeriesType 是一个枚举类,描述了Qt Charts当前支持的图表类型:

    Qt Charts之QAbstractSeries类

0x03 QAbstractSeries公有方法

QAbstractSeries主要的公有方法有:

  • bool QAbstractSeries::attachAxis(QAbstractAxis *axis);

    附加坐标轴到图表序列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);

​ 效果:

Qt Charts之QAbstractSeries类

当同一方向上有多个坐标轴同时依附到同一个图表序列上时,这些坐标轴将会被设置为相同的刻度范围,且经过实践证明,自动调整后的刻度范围是最后被依附到图标序列的坐标轴刻度范围:

//增加第二条个横纵坐标系
    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);

​ 效果:

Qt Charts之QAbstractSeries类

  • QList<QAbstractAxis *> QAbstractSeries::attachedAxes();

    获取图表序列当前依附的所有坐标轴集合:

// 打印上一步中依附到series的所有坐标轴集合
    qDebug() << "attached axes:" <<  series->attachedAxes();

​ 结果:

Qt Charts之QAbstractSeries类

  • QChart *QAbstractSeries::chart() const;

    获取当前图表序列series所属的QChart组件。通过 QChart::addSeries() 方法将series添加到QChart组件后可以通过此方法获取series被添加到的QChart对象指针。

  • bool QAbstractSeries::detachAxis(QAbstractAxis *axis);

    从当前图表序列分离坐标轴。

0x04 The End.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

MATLAB智能算法/科学与工程计算技术丛书

MATLAB智能算法/科学与工程计算技术丛书

编者:温正//孙华克 / 清华大学 / 2017-09-01 / 89.0

一起来看看 《MATLAB智能算法/科学与工程计算技术丛书》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具