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
原文地址:https://www.cnblogs.com/lynsha/p/13495060.html