У меня есть несколько свойств, которые имеют обработчики изменений, которые запрашивают перерисовку холста. Это работает довольно хорошо, но я хотел бы отказаться от сигнала, потому что пользователь может видеть только ограниченное количество обновлений, а некоторые элементы данных могут меняться довольно часто. Это приводит к гораздо большему обновлению, чем пользователь может видеть и уменьшает гибкость пользовательского интерфейса.Как отбить сигнал в QML?
Я рассмотрел debouncing сигнал в javascript (есть примеры в Интернете, как это сделать) и связать его с QML, но я не понял, как заставить QML и javascript работать вместе так еще.
Я хотел бы увидеть что-то вроде следующего:
function rateLimitedRefresh(){
// magic to limit to 30 frames per second
canvas.requestPaint()
}
onValueChanged: {
rateLimitedRefresh();
}
С помощью метода requestPaint только будет вызван на холсте максимум 30 раз в секунду.
Я использовал модификацию ответа Мертаниана. Эта модификация обеспечивает ограничение скорости передачи кадров на уровне кадра в отличие от уровня в секунду.
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()
}
}