Qt圖形影象開發之曲線圖表模組QChart庫讀取/設定X軸的顯示區間
阿新 • • 發佈:2020-03-12
設定初始的顯示的區間,常用的有兩種方法
(1)自動
lineseries = new QLineSeries();//宣告折線資料集 lineseries->append(4,10); //填充資料集 *lineseries << QPointF(13,5) << QPointF(17,6); lineChart = new QChart();//建立圖表 lineChart->addSeries(lineseries); // 將 資料集 新增至圖表中 lineChart->createDefaultAxes();//根據資料集,自動建立座標軸,座標軸的區間恰好完全容納已有的資料集 //lineChart->axisX()->setRange(0,45);//也可隨時手動調節要顯示的座標區間
(2)手動指定要顯示的區間(注意,軸變數如axisX一定要是靜態的/動態new/malloc的.r如果宣告成了區域性臨時變數,變數一旦出棧後,軸就不顯示了)
lineseries = new QLineSeries();//宣告折線資料系列 lineseries->append(4,6); lineChart = new QChart();//建立圖表 lineChart->addSeries(lineseries); // 將 資料集 新增至圖表中 QValueAxis *axisX = new QValueAxis();//軸變數、資料系列變數,都不能宣告為區域性臨時變數 QValueAxis *axisY = new QValueAxis();//建立X/Y軸 axisX->setRange(0,100); axisY->setRange(-5,5);//設定X/Y顯示的區間 lineChart->setAxisX(axisX); lineChart->setAxisY(axisY);//設定chart的座標軸 lineseries->attachAxis(axisX);//連線資料集與座標軸。特別注意:如果不連線,那麼座標軸和資料集的尺度就不相同,顯示
下面才是重點!
前面講的是,設定初始的顯示區間,那麼如何在程式中實時的修改顯示的區間呢?
任務描述:把當前的圖形沿X軸放大2倍,Y軸不放縮。
解決方案:任務要求X放大兩倍,也即把X的顯示區間縮小為原先的1/2,也即,我們必須首先得到當前的顯示區間才行。難點來了:lineChart->axisX(pSeries)的返回值是QAbstractAxis型別,這個型別並沒有提供座標軸區間的min和max成員變數,也沒有提供getMin和getMax方法。
由以上程式可知,不同型別的chart,座標軸axis的型別也是不同的,在void QChart::createDefaultAxes()的幫助中有:
XY圖(折線圖、曲線圖)、條形圖、餅圖座標軸型別都是不同的,但他們都繼承了QAbstractAxis。
折線圖的座標軸的型別為QValueAxis或者QDateTimeAxis,這兩個類是有min和max成員的,這樣解決方法就有了,我們非常確信的知道,lineChart->axisX(pLineSeries)的返回值型別雖然是QAbstractAxis,但其本質肯定是QValueAxis或者QDateTimeAxis,如果程式設計師心裡清楚軸的型別,就可以大膽的進行轉換,這一轉換肯定是安全的。
QValueAxis *axisX = (QValueAxis*)(lineChart->axisX(pLineSeries));//父類轉子類 int interval_len = axisX->max() - axisX->min();//求當前的區間長度 lineChart->axisX()->setRange(axisX->min(),axisX->min() + interval_len/2);//區間縮小1/2=影象放大2倍
如果擔心轉換的安全性,也可以用動態轉換:
QValueAxis *axisX = dynamic_cast<QValueAxis*>(lineChart->axisX(pLineSeries)); if(NULL == axisY) { qDebug() << "轉換失敗,lineChart->axisX()的記憶體內容根本不是QValueAxis型別或者QValueAxis的子類"; } QDateTimeAxis *axisDataX = dynamic_cast<QDateTimeAxis *>(lineChart->axisX(pLineSeries)); { qDebug() << "轉換失敗,軸型別不是QDateTimeAxis或者其子類"; }
本文介紹了Qt曲線圖表模組QChart庫讀取/設定X軸的顯示區間,更多關於Qt曲線圖表模組QChart庫的知識請檢視下面的相關連結