0

我正在使用 QML DateTimeAxis for X 轴来显示曲线。Y 轴是一个ValueAxis并显示我的信号的电压。现在我将滴答计数设置为 5,范围为 1 分钟。所以每 15 秒是一个滴答声

0:00、0:15、0:30、0:45、1:00

当时间继续,测量时间(X 轴)达到 1 分钟时,图表开始向右平滑滚动。但是刻度线停留在 x 位置。因此,在 1:06 分钟后,最小值为 0:06,最大值为 1:06 ......没关系。但是现在的蜱虫

0:06, 0:21, 0:36, 0:51, 1:06

我希望他们留在

0:15、0:30、0:45、1:00

下一个刻度应该在 1:15

为此,我向我的DateTimeAxis添加了一个函数updateTicks()并将其称为onRangeChanged。在这个函数中,我使用 mapToPosition 计算刻度的 x 位置,并将薄矩形添加到该位置的ChartView

但是有更好的方法吗?

这是我写的部分代码:

ChartView {
    id: chartView

    Repeater{
        id: timeTicks
        property double tickX
        property double tickY
        property double tickHeight
        property double tickSpacing: 0

        model: 4

        Rectangle {
            width: 1
            color: "black"
            x: timeTicks.tickX+timeTicks.tickSpacing*index
            y: timeTicks.tickY
            height: timeTicks.tickHeight
        }
    }

    DateTimeAxis {
        id: axisX
        min: context.startTime
        max: context.endTime
        tickCount: 0
        format: "mm:ss"
        color: "black"
        labelsColor: color

        property int timeWidth: 60000

        onRangeChanged: updateTicks()

        function updateTicks(){

            var diff = timeWidth / timeTicks.model;
            var tick = Math.ceil(axisX.min.getTime() / diff) * diff;

            var top = Qt.point(tick, axis.max);
            var bottom = Qt.point(tick, axis.min);

            var topMapped = chartView.mapToPosition(top, axis)
            var bottomMapped = chartView.mapToPosition(bottom, axis)

            timeTicks.tickHeight = bottomMapped.y-topMapped.y;

            timeTicks.tickX = topMapped.x;
            timeTicks.tickY = topMapped.y;

            timeTicks.tickSpacing = chartView.mapToPosition(Qt.point(diff, 0), axis).x - chartView.mapToPosition(Qt.point(0, 0), axis).x;
        }
    }

    ValueAxis {
        id: axis
        min: 0
        max: 100
    }

}
4

0 回答 0