1. 程式人生 > 程式設計 >Qt圖形影象開發之曲線圖表模組QChart庫座標軸和資料不對應、密集的散點圖無法顯示問題解決方法

Qt圖形影象開發之曲線圖表模組QChart庫座標軸和資料不對應、密集的散點圖無法顯示問題解決方法

QChart座標軸和資料不對應問題描述:

lineseries->append(4,10);
lineseries->append(5,8);
Chart->addSeries(lineseries); // 將 series 新增至圖表中
axisX->setRange(0,15);//設定X的顯示範圍
axisY->setRange(-20,20);
lineChart->setAxisX(axisX);//把軸新增到圖表中
lineChart->setAxisY(axisY);

結果發現,資料系列中的點(4,10)在座標系中的座標不是(4,10)

原因在於,軸和資料系列沒有連線。

一個圖表QChart中可以有多個數據系列(也即一個圖表中可以有多條曲線,甚至可以同時包含散點圖和折線),每個資料系列都必須與兩個座標軸相連線。

連線方法有兩種:

(1)在給圖表設定軸時,順便與資料系列相連

lineChart->setAxisX(axisX,lineseries);//把軸新增到圖表中,同時把資料系列與這個軸相連

lineChart->setAxisY(axisY,lineseries);//

(2)單獨的語句把資料系列和軸相連(只有series已經被新增進chart之後,再執行attachAxis才能有效)

lineseries->attachAxis(axisX);

lineseries->attachAxis(axisY);

密集的散點圖無法顯示問題描述

如下圖所示:一個由1000個point組成的QScatterSeries,密集的部分顯示不出來,只有放大之後才能看清。

更惡劣的情況是,把chartView縮小之後,最後只能看見最後一個點。

Qt圖形影象開發之曲線圖表模組QChart庫座標軸和資料不對應、密集的散點圖無法顯示問題解決方法

原因分析:QT繪製圖形時,會用到QBrush和QPen,QPen用於繪製輪廓,QBrush用於繪製填充,預設情況下,QScatterSeries繪製散點時,用的QPen的顏色是白色的,也即繪出的散點,帶白色邊框,影象縮小之後,白色邊框把填充的紅色給遮擋住了。把散點放大之後,就能明白我說的意思了

如下圖:

Qt圖形影象開發之曲線圖表模組QChart庫座標軸和資料不對應、密集的散點圖無法顯示問題解決方法

解決方法:給QScatterSeries設定QPen的粗細為0,或者透明,或者不使用QPen,均可解決這一問題,示例程式碼如下:

QScatterSeries scatterSeries;
scatterSeries.setMarkerSize(25);//設定點的大小(單位:畫素數)
scatterSeries.setMarkerShape(QScatterSeries::MarkerShapeCircle);//點的形狀:方形/圓形/自己用pen畫
 
//方法1,設定畫筆的粗細為0
QPen pen;
pen.setWidth(0);
cntScatterSeries.setPen(pen);
 
//方法2:把畫筆的顏色設定為透明
ScatterSeries.setPen(QPen(Qt::transparent));
 
//方法3:不使用畫筆(只用QBrush填充點,)
ScatterSeries.setPen(QPen(Qt::NoPen));//畫出的點不帶輪廓

效果如下:已經沒有輪廓了,這樣即使把影象縮小也不會被白色輪廓給遮擋住了

Qt圖形影象開發之曲線圖表模組QChart庫座標軸和資料不對應、密集的散點圖無法顯示問題解決方法

本文主要介紹了Qt曲線圖表模組QChart庫座標軸和資料不對應、密集的散點圖無法顯示問題解決方法,更多關於Qt曲線圖表模組QChart庫的知識請檢視下面的相關連結