Qt Charts之QAbstractSeries類

文章首發自公衆號:: nullobject
我的站點: https://www.nullobject.cn
這篇文章主要講解QAbstractSeries的API及其使用。

0x00 寫在前面:Qt Charts的組成結構

​ 理解本文章內容以前,須要讀者對Qt Charts的基本組成有個總體認識,具體能夠參考這篇文章:Qt Charts 基本組成。Qt Charts主要由QChartView、QChart、QLegend圖例、座標軸(由QAbstractAxis子類實現)、數據源(由QAbstractSeries子類實現)等組成:函數

Qt Charts組成結構

0x01 QAbstractSeries類

​ 由上圖可知,Qt Charts圖表中,數據的最終呈現主要由QAbstractSeries及其派生類負責(上圖爲QLineSeries),一般在實際開發中都是直接使用QAbstractSeries的派生類來實現功能。QAbstractSeries做爲Qt Charts模塊中全部數據序列類(Q*Series)的基類,與其子類的繼承關係大體以下:性能

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格式的文本。spa

    • QString name() const;

      獲取series圖例名稱。.net

    • void setName(const QString &name);

      設置series圖例名稱。當圖例名稱發生改變時,會觸發QAbstractSeries的nameChanged()信號。指針

QAbstractSeries圖例名稱

  • bool useOpenGL;code

    獲取和設置series是否開啓OpenGL加速。對象

    • bool useOpenGL() const;

      獲取是否開啓OpenGL加速。blog

    • void setUseOpenGL(bool enable=true);

      設置開啓/關閉OpenGL加速渲染,默認關閉。該選項發生改變時會觸發QAbstractSeries的useOpenGLChanged()信號。

    Tips : 在不開啓OpenGL加速就能知足性能要求且對該選項帶來的 反作用不熟悉的狀況下, 建議不要開啓OpenGL加速!

當須要繪製大數據量的圖表序列時,開啓OpenGL加速以後series的繪製性能顯著提高。可是Qt Charts實現的OpenGL加速(依託QOpenGLWidget組件實現)迄今爲止仍存在一些問題,好比MDI程序環境下,開啓了OpenGL加速的圖表序列會被置頂於全部MDI子窗口之上,形成圖表重疊錯亂的問題:

開啓OpenGL加速的QLineSeries

並且,目前只有QLineSeries和QScatterSeries兩種類型的圖表支持開啓OpenGL繪製,且當QLineSeries做爲面積圖QAreaSeries的邊緣線時也不能開啓OpenGL。所以,慎重開啓此選項!

  • qreal opacity;

    獲取和設置圖表序列顯示的透明度。

    • qreal opacity() const;

      獲取series當前設置的透明度。

    • void setOpacity(qreal opacity);

      設置series顯示的透明度,設置範圍:全透明0.0~1.0不透明,該屬性值發生改變時會觸發opacityChanged()信號。

      opacity=1.0

      opacity=0.25

  • 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當前支持的圖表類型:

    SeriesType聲明-摘自Qt文檔

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);

​ 效果:

附加座標軸到圖表

當同一方向上有多個座標軸同時依附到同一個圖表序列上時,這些座標軸將會被設置爲相同的刻度範圍,且通過實踐證實,自動調整後的刻度範圍是最後被依附到圖標序列的座標軸刻度範圍:
//增長第二條個橫縱座標系
    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);

​ 效果:

同方向依附多個座標軸到圖表

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

    獲取圖表序列當前依附的全部座標軸集合:

// 打印上一步中依附到series的全部座標軸集合
    qDebug() << "attached axes:" <<  series->attachedAxes();

​ 結果:

series依附的全部座標軸

  • QChart *QAbstractSeries::chart() const;

    獲取當前圖表序列series所屬的QChart組件。經過QChart::addSeries()方法將series添加到QChart組件後能夠經過此方法獲取series被添加到的QChart對象指針。

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

    從當前圖表序列分離座標軸。

0x04 The End.

相關文章
相關標籤/搜索