QChart-鼠標和按鍵操作


1.鼠標和按鍵操作

要對一個QChart圖表進行鼠標和按鍵操作,需要在QChartView類里對鼠標和按鍵事件進行處理,這就需要自定義一個從QChartView繼承的類,對需要處理的鼠標和按鍵事件進行處理。

QChartView.setDragMode()函數將視圖組件鼠標拖動選擇放手設置為“橡皮框”形式,即

   self.setDragMode(QGraphicsView.RubberBandDrag)

這樣在圖表上按下鼠標左鍵框選時,隨着鼠標拖動會顯示一個矩形選擇框。

1. keyPressEvent(event)是鍵盤按鍵按下時觸發的事件函數,從event.key()獲得按下按鍵的名稱,判斷按鍵然后做出縮放、移動等操作。

QChart有以下幾個用於縮放和移動的函數:
  zoom(factor)函數:對圖表整個縣市區的內容進行縮放,float型參數factor大於1表示放大,小於1表示縮小,縮放后坐標軸范圍會自動變化。

  zoomIn()函數:放大圖表,放大因子為2。

  zoomOut()函數:縮小圖表,縮小因子為2。

  zoomIn(rect)函數:參數rect是QRectF類型對象,表示一個矩形框,次函數的功能是放大顯示rect表示的矩形區域。

  zoomReset()函數:取消所有縮放變化,恢復圖表原始的大小。

  scroll(dx, dy)函數:參數dx和dy都是float型,表示評議的像素值。

2. QChart序列

1. QScatterSeries序列

QScatterSeries是顯示散點的序列,它的接口函數可以設置散點的形狀、大小、填充顏色和邊框顏色。QScatterSeries.setMarkerShape(shape)用於設置散點形狀,參數shape是枚舉類型,QScatterSeries.MarkerShape只有以下兩種取值:

  QScatterSeries.MarkerShapeCircle(圓形散點)

  QScatterSeries.MarkerShapeRectangle(方形散點)

雖然只有兩種散點形狀,但是可以通過填充顏色、邊框顏色等構成多種不同的散點,也可以通過Graphic View結果的繪圖功能自定義散點形狀。

2. QSplineSeries序列

QSplineSeries的父類是QLineSeries,其接口函數與QLineSeries完全相同,只是繪制曲線的方式不同。QLineSeries是將相鄰數據點用直線連接,而QSplineSeries根據數據點做了插值,使曲線變得光滑。

3. hovered()信號和clicked()信號

QSplineSeries、QLineSeries和QScatterSeries這三個類都是從QXYSeries繼承來的,在QXYSeries類中定義了以下兩個比較有用的信號。

  信號hovered(point, state)在鼠標移動到序列上或離開序列時發射。QPointF類型的參數point就是序列上的點的數據坐標,bool性參數state表示進入(True)或是離開(False)。

  信號clicked(point)在單擊序列上的點時發射,QPointF類型的參數point就是序列上的點的數據坐標。

4. 創建默認坐標軸

QChart.createDefaultAxes()函數用於創建默認的坐標軸,創建的默認坐標軸會自動與已經添加的序列關聯,這與前面兩個示例創建坐標軸的方式不同。創建的默認坐標軸可以通過QChart的axisX()和axisY()訪問,仍然可以設置坐標軸的范圍、標題等屬性。

因為序列時基於數據點的,所以創建的默認坐標軸是QValueAxis,這里還調用了QValueAxis.applyNiceNumbers()函數自動調整坐標軸范圍和分度個數,以使得坐標軸看起來更美觀。

5. QLegendMarker的使用

函數__createChart中的代碼:
for marker in chart.legend().markers(): 
marker.clicked.connect(self.do_LegendMarkerClicked)

圖表添加序列后會自動創建圖例,QLegend.markers()函數返回的是一個列表,列表元素是QLegendMarker類型的對象。QLegendMarker對象就是圖例上與每個序列關聯的小色塊和文字,QLegendMarker的接口函數可以控制圖例上的顯示效果。QLegendMarker類的主要接口函數如下:

  setVisible()    設置圖例標記的可見性

  setLabel()     設置標簽,即圖例中的序列的名稱

  setFont()      設置標簽的字體

  series()     返回關聯的序列

  type()      返回圖例標記的類型,返回值類型是枚舉類型QLegendMarker.LegendMarkerType

QLegendMarker.type()函數返回圖例標記的類型,其返回值是枚舉類型QLegendMarker.LegendMarkerType,此枚舉類型的取值與序列類型的關系如下所示(表中表示枚舉類型及其取值時省略了前綴“QLegendMarker.”):

枚舉類型LegendMarkerType的取值與序列類型的關系
LegendMarkerType枚舉類型取值 對應的序列類
LegendMarkerTypeArea   QAreaSeries                      
LegendMarkerTypeBar

QBarSeries和QHorizontalBarSeries

QStackedBarSeries和QHorizontalStackedBarSeries

QPercentBarSeries和QHorizontalPercentBarSeries

LegendMarkerTypePie QPieSeries
LegendMarkerTypeXY QSplineSeries、QLineSeries和QScatterSeries
LegendMarkerTypeBoxPlot QBoxPlotSeries
LegendMarkerTypeCandlestick QCandlestickSeries

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM