【问题标题】:chartView: axis values change on ZoomingchartView:轴值在缩放时发生变化
【发布时间】: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
  • 是的。但它只是在网格变化上设置了一些动画。没有帮助

标签: c++ qt charts pyqt5 qml


【解决方案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 并且刻度基于轴上的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2017-03-01
    相关资源
    最近更新 更多