QtCharts之QValueAxis類

文章首發自公衆號:: nullobject
個人站點:https://www.nullobject.cn

這篇文章主要講解QValueAxis類的API及其使用。

0x00 關於QValueAxis

QValueAxis,即數值軸,適用於具有連續數據座標的圖表。QValueAxis作爲QAbstractAxis的實現類之一,

在繼承了QAbstractAxis特性的同時,根據數值軸的特點封裝實現了許多方便實用的功能。QValueAxis使用起來也非常簡單,在上一篇文章QAbstractAxis中的示例代碼均是使用QValueAxis實例來說明的。本文主要介紹QValueAxis實現的功能。

QValueAxis使用示例:

#include <QApplication>
#include <QChartView>
#include <QLineSeries>
#include <QValueAxis>
#include <QDebug>

QT_CHARTS_USE_NAMESPACE

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);

  // 創建QChartView對象
  QChartView *chartView = new QChartView;
  chartView->setRenderHint(QPainter::Antialiasing);
  // 創建序列
  QLineSeries *series = new QLineSeries();
  // 隱藏圖例
  chartView->chart()->legend()->hide();
  // 添加數據
  series->append(0,2);
  series->append(QPointF(2,6));
  series->append(3,8);
  series->append(7,9);
  series->append(11,3);
  *series << QPointF(11,2) << QPointF(15,5) << QPointF(18,4) << QPointF(19,2);
  // 添加序列到圖表
  chartView->chart()->addSeries(series);
  // 創建X軸
  QValueAxis *axisX = new QValueAxis;
  // 設置QValueAxis屬性
  axisX->setRange(10, 20.5);
  axisX->setTickCount(5);
  axisX->setLabelFormat("%.2f");
  chartView->chart()->setAxisX(axisX, series);
  // 創建Y軸
  QValueAxis *axisY = new QValueAxis;
  axisY->setRange(0, 10);
  axisY->setTickCount(5);
  axisY->setLabelFormat("%.2f");
  chartView->chart()->setAxisY(axisY, series);
  chartView->resize(400,300);
  chartView->show();
  return a.exec();
}

效果:
QValueAxis使用示例

0x01 設置刻度線

在Qt 5.12版本之前,QValueAxis只支持固定的刻度線設置,只能通過setTickCount設置刻度線的數量,刻度線會平均分佈在座標軸。而在Qt最新版本5.12版中,QValueAxis支持通過tickType屬性來設置刻度線爲固定分佈(TicksFixed)或者是動態分佈(TicksDynamic)。

  • QValueAxis::TickType tickType:設置刻度類型
QValueAxis::TickType tickType() const;
void setTickType(QValueAxis::TickType type);

其中TickType爲QValueAxis中聲明的用於描述刻度類型(刻度線和刻度標籤在軸上的位置)的枚舉類:

enum TickType {
  TicksDynamic = 0,
  TicksFixed
};

tickType屬性改變時觸發tickTypeChanged(QValueAxis::TickType)信號

  • TicksFixed 設置刻度位置爲均勻分佈

QValueAxis默認的刻度類型爲TicksFixed。將刻度類型設置爲TicksFixed,可以通過設置tickCount屬性值來指定刻度線的數量,此時刻度線會被均勻地地分佈在座標軸上。默認的刻度線數量是5條,最低數量不能低於2。:

axisY->setRange(0, 10);
axisY->setTickType(QValueAxis::TickType::TicksFixed);
axisY->setTickCount(6);

效果:
TicksFixed
其中tickCount的操作函數聲明如下:

int tickCount() const;
void setTickCount(int count);

tickCount屬性修改只在tickType值爲TicksFixed時有效。

tickCount屬性改變時觸發tickCountChanged(int)信號。

  • TicksDynamic 設置刻度位置爲動態分佈

動態設置刻度的位置,需要通過設置錨點tickAnchor刻度間距tickInterval屬性值來實現,必須要設置指定tickInterval纔有效果:

axisY->setRange(0, 10);
axisY->setTickType(QValueAxis::TickType::TicksDynamic);
// 設置刻度間距爲3
axisY->setTickInterval(3);
// 設置錨點座標爲5
axisY->setTickAnchor(5);

效果:
TicksBynamic
其中錨點tickAnchor屬性用於指定刻度線和標籤開始繪製的位置,刻度間距tickInterval屬性用於指定刻度與刻度之間的距離。上示例子中將tickAnchortickInterval分別設置爲5和3,表示刻度將從座標爲5的位置開始,向軸兩端分佈,如果不顯示設置tickAnchor,則默認從座標軸的起始位置開始分佈;tickInterval的類型爲qreal類型,支持設置刻度間隔爲小數。

修改tickAnchortickInterval對應會觸發的信號分別爲:tickAnchorChanged(int)tickIntervalChanged(qreal)

0x02 設置座標軸顯示範圍

QValueAxis通過maxmin兩個屬性來表示座標軸的最大和最小值,可以通過調用對應的方法來設置座標軸的顯示範圍。

  • qreal max:設置座標軸最大值
qreal max() const;
void setMax(qreal max);

max屬性修改會觸發maxChanged(qreal)信號。

  • qreal min:設置座標軸最小值
qreal min() const;
void setMin(qreal min);

min屬性修改會觸發minChanged(qreal)信號。

  • setRange:設置座標軸顯示範圍
void setRange(qreal min, qreal max);

除了可以調用setMaxsetMin單獨設置座標軸的極值外,也可以直接調用setRange同時設置座標軸的最大、最小值:

//    axisY->setMin(0);
//    axisY->setMax(10);
// 等價於setRange(0,10);
axisY->setRange(0, 10);

當座標軸的最大值max或者最小值min發生改變時,都會觸發rangeChanged(qreal min,qreal max)信號。

0x03 設置刻度標籤顯示格式

QValueAxis座標軸支持通過labelFormat屬性設置標籤的顯示格式,例如指定顯示小數位數等。

  • **QString labelFormat:**設置標籤格式
QString labelFormat() const;
void setLabelFormat(const QString &format);

其中傳參format爲需要指定的字符串格式,例如設置爲顯示小數點後兩位數:

axisX->setLabelFormat("%.2f");

目前labelFormat支持設置以下轉換說明符、長度修飾符以及標準C++庫中printf()函數提供的格式標誌:d, i, o, x, X, f, F, e, E, g, G, c。具體使用可以百度搜索瞭解:printf() 輸出格式
設置標籤格式爲顯示兩位小數

修改該屬性會觸發labelFormatChanged(const QString&)信號。

0x04 The End 😃

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章