Могу ли я получить уведомление о завершении перекраски предмета?
Я делаю снимок (через ShaderEffectSource
с live: false
) предмета, но иногда (1 случай из 200) я получаю пустой снимок. Я делаю снимок на основе такого сигнала:
Image {
onStatusChanged: {
if (status == Image.Ready) {
snapshotter.makeSnapshot();
}
}
}
Это просто общий контекст. Я не буду сейчас публиковать тестовый пример, потому что это большое приложение, и я еще не выделил тестовый пример. Это может быть материалом для будущего вопроса.
Так что я пока не спрашиваю "где ошибка в моем коде". Вместо этого у меня есть простой вопрос, который, я думаю, может помочь мне исправить ошибку:
Могу ли я получить уведомление о завершении перекраски предмета?
Обоснование: Может быть, когда я получу status == Image.Ready
, изображение просто загрузило и еще не закрасило загруженные данные на экранную поверхность. Так что, если мой желаемый сигнал существует, я мог бы зацепить его вместо того, чтобы зацепить Image.statusChanged
,
Примечание: я мог бы реализовать свой собственный NotifyingImage
компонент, который работает как Image
но дополнительно выставляет repainted
сигнал. Но я хотел бы знать, есть ли встроенный способ.
Смежный вопрос: " Получайте уведомления, когда QQuickItem потребуется обновить ". Но там спрашивающий удовлетворен знанием, когда обновляются данные элемента, и я спрашиваю о repainted
сигнал, который происходит позже, чем он просит.
1 ответ
Насколько я знаю Window
всегда отображается в целом. Таким образом, вы можете использовать Window
"s afterRendering
сигнал.
Недостаток: он будет срабатывать, когда что-либо в окне изменилось. Но в сочетании с(status == Image.Ready)
это может сработать для вас.
РЕДАКТИРОВАТЬ:
В сообщении в блоге, объявляющем о выпускеQt5.8
технический директор Qt Companies написал:
Кроме того, граф сцены теперь поддерживает частичные обновления экрана, если изменилась только небольшая область сценографии. Это значительно улучшило производительность рендерера Qt Quick 2D.
Я не знаю деталей реализации сигнала afterRendering
поэтому я не могу сказать, сработало ли это после такого частичного обновления, и если да, то как определить, касается ли это частичное обновление той части, которая вас интересует.