[qml]ChartView+LineSeries搭配实现曲线局部缩放功能

 Rectangle {
        id: view_rect
        anchors.fill: parent
        ChartView {
            id: view
            title: "*****"
            anchors.fill: parent
            legend.visible: false
            antialiasing: true
            property point hoveredPoint: Qt.point( 0, 0 )
            property bool hovered: false
            ValueAxis {
                id: axisX
                min: 0
                max: 50
                tickCount: 5
            }
 
            ValueAxis {
                id: axisY
                min: -0.5
                max: 1.5
            }
 
            LineSeries {
                id: series1
                axisX: axisX
                axisY: axisY
            }
 
            MouseArea {
                anchors.fill: parent
                hoverEnabled: true
                onPositionChanged: {
                    var point = Qt.point( 0, 0 )
                    point.x = mouse.x
                    point.y = mouse.y
                    var hoveredPoint = view.mapToValue( point, series1 )
                    if( hoveredPoint.x >= 0 && hoveredPoint.x <= 50 ) {
                        view.hovered = true
                        view.hoveredPoint = hoveredPoint
                    } else {
                        view.hovered = false
                    }
                }
 
                onWheel: {
                    if( view.hovered ) {
                        if( wheel.angleDelta.y > 0 ) {
                            if( axisX.max - axisX.min <= 2 ) {
                                return
                            }
                            view.zoomIn( view.hoveredPoint )
                        } else {
                            view.zoomOut( view.hoveredPoint )
                            if( axisX.min <= 0 ) {
                                axisX.min = 0
                            }
                            if( axisX.max >= 50 ) {
                                axisX.max = 50
                            }
                        }
                    }
                }
            }
 
            function zoomIn( hoveredPoint ) {
                if( hoveredPoint.x - axisX.min <= 1 ) {
                    return
                }
                var scale = parseFloat( ( hoveredPoint.x - axisX.min ) / ( axisX.max - axisX.min ) )
                axisX.min++
                axisX.max = ( hoveredPoint.x - axisX.min ) / scale + axisX.min
            }
 
            function zoomOut( hoveredPoint ) {
                var scale = parseFloat( ( hoveredPoint.x - axisX.min ) / ( axisX.max - axisX.min ) )
                axisX.min--
                axisX.max = ( hoveredPoint.x - axisX.min ) / scale + axisX.min
            }
        }
 
        Component.onCompleted: {
            for (var i = 0; i <= 50; i++) {
                series1.append(i, Math.random());
            }
        }
    }

实现该功能最关键在于获取鼠标位置对应的坐标值,ChartView提供一个方法mapToValue,指明一个point与series,就可获得这个point对应series的坐标值。现在通过一个覆盖整个ChartView的MouseArea获取mouse,转换成point,当鼠标在坐标轴内移动时,就可记录到hoveredPoint内。

放大功能写在zoomIn函数内,这里每次放大的值只是将最小值+1,可自己调整。注意一点的是hoverPoint.x是不能小于axisX.min的,所以在放大前做了判断;

缩小功能写在zoomOut函数内,这边是想让曲线饱满的覆盖在整个坐标内,所以对两个极端做了判断,超出范围就将边界值赋值给它;

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: qml chartview是QtQuick中用于绘制图表的组件,可以通过设置属性来实现曲线的显示和隐藏。 要隐藏曲线,可以通过设置chartview的visible属性为false。例如: ChartView { id: chart visible: false // 其他属性设置 } 要显示曲线,可以将visible属性设置为true。例如: chart.visible = true; 另外,如果希望在特定情况下进行曲线的显示和隐藏,可以使用其他的条件判断,并通过设置visible属性来达到目的。例如: Rectangle { width: 200 height: 200 MouseArea { anchors.fill: parent onClicked: { if(chart.visible){ chart.visible = false; }else{ chart.visible = true; } } } ChartView { id: chart anchors.fill: parent // 其他属性设置 } } 以上是使用qml chartview实现曲线的显示和隐藏的方法。通过设置visible属性,可以方便地控制曲线的可见性。 ### 回答2: QMLChartView组件可以通过设置lineSeries的visible属性来控制曲线的显示和隐藏。通过修改该属性,我们可以在需要的时候显示曲线并在不需要的时候隐藏曲线。 在QML中,我们可以通过以下代码隐藏或显示曲线: ```qml ChartView { // ... LineSeries { visible: false // 默认情况下曲线是隐藏的 // ... } } ``` 上述代码中,我们通过将LineSeries的visible属性设置为false,来隐藏曲线。如果要显示曲线,只需将该属性设置为true即可。 另外,我们还可以通过按钮或其他交互方式来控制曲线的显示和隐藏。代码示例如下: ```qml ChartView { id: chartView // ... LineSeries { id: lineSeries // ... } Button { text: lineSeries.visible ? "隐藏曲线" : "显示曲线" onClicked: lineSeries.visible = !lineSeries.visible } } ``` 上述代码中,我们创建了一个按钮,按钮的文本会根据曲线的可见性进行调整。当按钮被点击时,会切换曲线的可见性。如果曲线是可见的,则按钮的文本将显示为"隐藏曲线",并隐藏曲线。反之,如果曲线是隐藏的,则按钮的文本将显示为"显示曲线",并显示曲线。 综上所述,在QML中,我们可以通过设置LineSeries的visible属性,或者利用交互控件(如按钮)来控制ChartView曲线的显示和隐藏。 ### 回答3: 使用QML中的ChartView组件可以很容易地实现曲线的显示和隐藏。 要显示曲线,首先需要创建一个ChartView,并设置曲线的属性。可以通过设置series属性来指定要显示的曲线类型,如折线图、柱状图等。 以下是一个简单的例子: ``` import QtCharts 2.15 ChartView{ id: chartView ValueAxis{ id: valueAxis } LineSeries{ name: "曲线" axisX: chartView.axisX axisY: valueAxis // 曲线的数据点 XYPoint{x: 0; y: 0} XYPoint{x: 1; y: 1} XYPoint{x: 2; y: 2} } // 更多曲线... } ``` 要隐藏曲线,可以通过设置曲线的visible属性为false来实现。 ``` LineSeries{ //... visible: false } ``` 另外,还可以使用QML中的状态(State)或者动画(Animation)来实现曲线的显示和隐藏效果。例如,可以创建一个按钮,通过点击按钮来切换曲线的显示状态。 ``` Button{ text: "隐藏曲线" onClicked: { lineSeries.visible = !lineSeries.visible } } ``` 通过以上方法,我们可以方便地在QML实现曲线的显示和隐藏操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值