国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ChartView與LineSeries搭配實現曲線局部縮放功能

2019-11-08 00:03:58
字體:
來源:轉載
供稿:網友

效果圖:

上一篇文章實現的時候還不知道有QtChart這個模塊......好好看了下資料就想做個例子實現一下這功能,比較了下代碼量...恩,直接看代碼:

    Rectangle {        id: view_rect        anchors.fill: parent//        anchors.topMargin: 40        ChartView {            id: view            title: "Two Series, Common Axes"            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                onHovered: {//                    view.hoveredPoint = point//                    view.hovered = state                }            }            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            }        }        // Add data dynamically to the series        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函數內,這邊是想讓曲線飽滿的覆蓋在整個坐標內,所以對兩個極端做了判斷,超出范圍就將邊界值賦值給它;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 独山县| 苗栗县| 吉木乃县| 亚东县| 龙里县| 乃东县| 祁阳县| 邵东县| 板桥市| 高台县| 武义县| 明溪县| 双鸭山市| 思南县| 波密县| 开封县| 金门县| 齐河县| 乌恰县| 东乡县| 张家口市| 方城县| 松原市| 莎车县| 泸水县| 慈溪市| 兴安盟| 安多县| 天气| 兴山县| 汽车| 鹿邑县| 民县| 海晏县| 原阳县| 湟中县| 新宁县| 运城市| 民勤县| 东兰县| 高邮市|