【问题标题】:How to debounce a signal in QML?如何在 QML 中消除信号抖动?
【发布时间】:2015-08-10 22:09:56
【问题描述】:

我有一些属性具有请求重新绘制画布的更改处理程序。这工作得相当好,但我想消除信号,因为用户只能看到有限数量的刷新,并且一些数据项可能会非常频繁地更改。这会导致用户无法看到更多刷新,并降低 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()
    }
}

【问题讨论】:

    标签: qml filtering signals-slots


    【解决方案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(); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2015-01-22
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多