如何在QML中去抖信号?

时间:2015-08-10 22:09:57

标签: qml filtering signals-slots

我有一些属性有更改处理程序,请求重绘画布。这种方法效果很好,但我想去抖动信号,因为用户只能看到有限数量的刷新,而且某些数据项可能会频繁更改。这会导致刷新比用户看到的更多,并降低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()
    }
}

1 个答案:

答案 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(); 
}