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枚舉類型取值 | 對應的序列類 |
LegendMarkerTypeArea | QAreaSeries |
LegendMarkerTypeBar | QBarSeries和QHorizontalBarSeries QStackedBarSeries和QHorizontalStackedBarSeries QPercentBarSeries和QHorizontalPercentBarSeries |
LegendMarkerTypePie | QPieSeries |
LegendMarkerTypeXY | QSplineSeries、QLineSeries和QScatterSeries |
LegendMarkerTypeBoxPlot | QBoxPlotSeries |
LegendMarkerTypeCandlestick | QCandlestickSeries |