使用qt的qchart顯示數據曲線,坐標軸QValueAxis可以設置刻度間隔數量,但每個刻度的數值是根據坐標的極值除以間隔數量得到的,不一定是整數,導致曲線控件的顯示刻度不適合觀察。
如圖:
縱坐標刻度帶有小數,觀察數據曲線時,就不容易計算曲線的波動。解決方法很簡單,就是設置曲線坐標范圍后,根據坐標范圍計算設置間隔數量,讓每個刻度都是整數,例如:
范圍-100~700,共8個區域,9個刻度,所以:
1 mAyis0->setTickCount(9); //會划分成幾個單位·
2 mAyis0->setRange(-100,700); 3 mAyis0->setLabelFormat("%d"); //設置刻度的格式
這樣就解決了初始化時曲線控件的坐標軸間隔取整問題,但是曲線控件顯示過程中認為進行縮放,坐標軸間隔就會隨着人畫的縮放區域變化,出現小數(不整的數)。
所以還需要加入坐標軸對范圍變化的響應,例如,要將坐標軸的刻度值設置成10的倍數:
connect(mAyis0,SIGNAL(rangeChanged(qreal, qreal)),this,SLOT(mAyis0_rangeChanged(qreal, qreal)));
然后在坐標范圍變化時,首先給最小值取整,然后將最大值變化到間隔可以取整的值。
1 void MainWindow::mAyis0_rangeChanged(qreal min, qreal max) 2 { 3 u32 mi=min,ma=max; 4 u32 t0=mi%10; 5 if(t0) 6 { 7 mi+=10-t0; 8 } 9 u32 t=ma-mi; 10 t0=t%80; 11 if(t0) 12 { 13 ma+=80-t0; 14 } 15 mAyis0->setRange(mi,ma); 16 }
這樣每次人工選擇縮放區域都能變化到可取整的區域,效果: