• 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
  • 相关阅读:
    最全的常用正则表达式大全--包括校验数字、字符、一些特殊的需求等【转】
    【转】浏览器“后退”、“前进”或可以这么去监听
    vue单页面title修改
    Vue.js中ref ($refs)用法举例总结
    js 程序执行与顺序实现详解
    $(document).ready和window.onload的区别 【转】
    linq to xml(C#)
    TCP/IP|| 建立连接或终止
    TCP/IP TCP
    TCP/IP DNS
  • 原文地址:https://www.cnblogs.com/lynsha/p/13495060.html
Copyright © 2020-2023  润新知