我正在使用 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
}
}