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繪製圖形時,會用到QBrush和QPen,QPen用於繪製輪廓,QBrush用於繪製填充,預設情況下,QScatterSeries繪製散點時,用的QPen的顏色是白色的,也即繪出的散點,帶白色邊框,影象縮小之後,白色邊框把填充的紅色給遮擋住了。把散點放大之後,就能明白我說的意思了
如下圖:
解決方法:給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庫的知識請檢視下面的相關連結