如何去抖动 QML 中的信号?
How to debounce a signal in QML?
我有一些属性具有请求重绘 canvas 的更改处理程序。这工作得很好,但我想去抖动信号,因为用户只能看到有限数量的刷新,并且某些数据项可能会非常频繁地更改。这会导致比用户看到的刷新次数多得多,并降低了 UI 的响应速度。
我看过 javascript 中的信号去抖动(网上有关于如何做到这一点的示例)并将其绑定到 QML,但我还没有弄清楚如何获得 QML 和javascript以那种方式一起工作呢。
我希望看到如下内容:
function rateLimitedRefresh(){
// magic to limit to 30 frames per second
canvas.requestPaint()
}
onValueChanged: {
rateLimitedRefresh();
}
仅在 canvas 上调用 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()
}
}
这样的事情怎么样:
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();
}
我有一些属性具有请求重绘 canvas 的更改处理程序。这工作得很好,但我想去抖动信号,因为用户只能看到有限数量的刷新,并且某些数据项可能会非常频繁地更改。这会导致比用户看到的刷新次数多得多,并降低了 UI 的响应速度。
我看过 javascript 中的信号去抖动(网上有关于如何做到这一点的示例)并将其绑定到 QML,但我还没有弄清楚如何获得 QML 和javascript以那种方式一起工作呢。
我希望看到如下内容:
function rateLimitedRefresh(){
// magic to limit to 30 frames per second
canvas.requestPaint()
}
onValueChanged: {
rateLimitedRefresh();
}
仅在 canvas 上调用 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()
}
}
这样的事情怎么样:
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();
}