文章首發自公衆號:: nullobject 。
我的站點: https://www.nullobject.cn
這篇文章主要講解QValueAxis類的API及其使用。
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
在Qt 5.12版本以前,QValueAxis只支持固定的刻度線設置,只能經過setTickCount
設置刻度線的數量,刻度線會平均分佈在座標軸。而在Qt最新版本5.12版中,QValueAxis支持經過tickType
屬性來設置刻度線爲固定分佈(TicksFixed)或者是動態分佈(TicksDynamic)。函數
QValueAxis::TickType tickType() const; void setTickType(QValueAxis::TickType type);
其中TickType爲QValueAxis中聲明的用於描述刻度類型(刻度線和刻度標籤在軸上的位置)的枚舉類:spa
enum TickType { TicksDynamic = 0, TicksFixed };
tickType屬性改變時觸發
tickTypeChanged(QValueAxis::TickType)
信號
QValueAxis默認的刻度類型爲TicksFixed。將刻度類型設置爲TicksFixed,能夠經過設置tickCount屬性值來指定刻度線的數量,此時刻度線會被均勻地地分佈在座標軸上。默認的刻度線數量是5條,最低數量不能低於2。:code
axisY->setRange(0, 10); axisY->setTickType(QValueAxis::TickType::TicksFixed); axisY->setTickCount(6);
效果:orm
其中tickCount的操做函數聲明以下:htm
int tickCount() const; void setTickCount(int count);
tickCount屬性修改只在tickType值爲TicksFixed時有效。對象
tickCount屬性改變時觸發
tickCountChanged(int)
信號。
動態設置刻度的位置,須要經過設置錨點tickAnchor和刻度間距tickInterval屬性值來實現,必需要設置指定tickInterval纔有效果:
axisY->setRange(0, 10); axisY->setTickType(QValueAxis::TickType::TicksDynamic); // 設置刻度間距爲3 axisY->setTickInterval(3); // 設置錨點座標爲5 axisY->setTickAnchor(5);
效果:
其中錨點tickAnchor屬性用於指定刻度線和標籤開始繪製的位置,刻度間距tickInterval屬性用於指定刻度與刻度之間的距離。上示例子中將tickAnchor和tickInterval分別設置爲5和3,表示刻度將從座標爲5的位置開始,向軸兩端分佈,若是不顯示設置tickAnchor,則默認從座標軸的起始位置開始分佈;tickInterval的類型爲qreal
類型,支持設置刻度間隔爲小數。
修改 tickAnchor和 tickInterval對應會觸發的信號分別爲:tickAnchorChanged(int)
和tickIntervalChanged(qreal)
。
QValueAxis經過max
和min
兩個屬性來表示座標軸的最大和最小值,能夠經過調用對應的方法來設置座標軸的顯示範圍。
qreal max() const; void setMax(qreal max);
max屬性修改會觸發
maxChanged(qreal)
信號。
qreal min() const; void setMin(qreal min);
min屬性修改會觸發
minChanged(qreal)
信號。
void setRange(qreal min, qreal max);
除了能夠調用setMax
或setMin
單獨設置座標軸的極值外,也能夠直接調用setRange
同時設置座標軸的最大、最小值:
// axisY->setMin(0); // axisY->setMax(10); // 等價於setRange(0,10); axisY->setRange(0, 10);
當座標軸的最大值max
或者最小值min
發生改變時,都會觸發rangeChanged(qreal min,qreal max)
信號。
QValueAxis座標軸支持經過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&)
信號。