chartView:轴值在缩放时发生变化

Posted

技术标签:

【中文标题】chartView:轴值在缩放时发生变化【英文标题】:chartView: axis values change on Zooming 【发布时间】:2021-05-04 23:55:55 【问题描述】:

我的 Qml 中有一个简单的图表视图:

import QtQuick 2.9
import QtQuick.Window 2.2
import QtCharts 2.0

Window 
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    ChartView 
        id: chartView
        anchors.fill: parent
        theme: ChartView.ChartThemeBrownSand
        antialiasing: true

        LineSeries 
            name: "LineSeries"
            XYPoint  x: 0; y: 0 
            XYPoint  x: 1.1; y: 2.1 
            XYPoint  x: 1.9; y: 3.3 
            XYPoint  x: 2.1; y: 2.1 
            XYPoint  x: 2.9; y: 4.9 
            XYPoint  x: 3.4; y: 3.0 
            XYPoint  x: 4.1; y: 3.3 
        

        MouseArea
            anchors.fill: parent
            onDoubleClicked: chartView.zoomReset();
        
    

我用一个矩形来放大它。:

var r = Qt.rect(x, y, w, h)
chartView.zoomIn(r)

还有它的工作格栅!但问题是当用户在图表内部放大时,轴中的值会发生变化。新的价值观会发生一些变化。 所以当用户想要放大一个值并且值的范围很大时,用户会丢失他想要放大的特定值。

主要问题是因为刻度不是基于值...它们基于范围的最大值和最小值

(max - min)/ticks = new ticks on the axis

我需要将它们固定在数字上,以便即使在绘图中缩放 10 次或更多的刻度线仍然保持在值上。

【问题讨论】:

你试过了吗:animationOptions:ChartView.GridAxisAnimations 是的。但它只是在网格变化上设置了一些动画。没有帮助 【参考方案1】:

您可以根据此文档qml-qtcharts-valueaxis 设置基于值的刻度:

tickType : ValueAxis.TicksDynamic : 根据 tickAnchor 和 tickInterval 值放置刻度

ValueAxis 
    id: axisX
    min: 0
    max: 10
    tickCount: 5

    tickAnchor: 1
    tickInterval: 1
    tickType : ValueAxis.TicksDynamic

所以只需设置tickInterval 和tickAnchor 并且刻度基于轴上的值。

【讨论】:

以上是关于chartView:轴值在缩放时发生变化的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 FFmpeg 缩放时帧数会发生变化?

为啥,当我缩放多边形时,我的光强度会发生变化?

我的变量的值在另一个文件中发生变化

你如何使用 `BeApproximately` 的值在循环的每次迭代中都会发生变化?

int 值在 for 循环后自行变化

使用 dae 文件播放动画时 SCNNode 比例发生变化