QtCharts之QValueAxis類

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

 

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

0x00 關於QValueAxis

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

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

QValueAxis使用示例:app

#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();
}

效果:ide

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中聲明的用於描述刻度類型(刻度線和刻度標籤在軸上的位置)的枚舉類:spa

enum TickType {
  TicksDynamic = 0,
  TicksFixed
};
tickType屬性改變時觸發 tickTypeChanged(QValueAxis::TickType)信號
  • TicksFixed 設置刻度位置爲均勻分佈

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

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

效果:orm

TicksFixed

其中tickCount的操做函數聲明以下:htm

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

相關文章
相關標籤/搜索