我有一些属性有更改处理程序,请求重绘画布。这种方法效果很好,但我想去抖动信号,因为用户只能看到有限数量的刷新,而且某些数据项可能会频繁更改。这会导致刷新比用户看到的更多,并降低UI的响应速度。
我已经看过在javascript中对信号进行去抖动(网上有关于如何做到这一点的例子)并将其与QML联系起来,但我还没弄明白如何让QML和javascript一起工作就这样。
我希望看到以下内容:
function rateLimitedRefresh(){
// magic to limit to 30 frames per second
canvas.requestPaint()
}
onValueChanged: {
rateLimitedRefresh();
}
使用requestPaint方法仅在画布上调用每秒最多30次。
我使用了Mertanian答案的修改。此修改强制每帧级别的帧速率限制,而不是每秒级别。
property var limitStartTime: new Date()
function rateLimitedRefresh(){
// magic to limit to 30 frames per second
var now = new Date();
if (now - limitStartTime >= 32) {
limitStartTime = now
canvas.requestPaint()
}
}
答案 0 :(得分:1)
这样的事情怎么样:
property var limitStartTime: new Date()
property int refreshesThisSecond: 0
function rateLimitedRefresh(){
// magic to limit to 30 frames per second
if ((new Date()) - limitStartTime >= 33) {
limitStartTime = new Date(limitStartTime.getTime() + 33)
canvas.requestPaint()
}
}
onValueChanged: {
rateLimitedRefresh();
}