问题描述
我使用 QML DateTimeAxis 作为 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
为此,我将一个函数 updateTicks() 添加到我的 DateTimeAxis 并将其命名为 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,axis).x;
}
}
ValueAxis {
id: axis
min: 0
max: 100
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)