Проверьте, рисуется ли элемент QML - PullRequest
0 голосов
/ 30 октября 2019

У меня есть набор элементов QML, распределенных по всему моему интерфейсу. Они отображают данные с удаленного устройства, и их содержимое должно регулярно обновляться. Items расположены на нескольких вкладках и скрыты во вложенных экземплярах ListView, поэтому большинство из них не будут видны пользователю все время.

Чтобы поддерживать низкую пропускную способность, я хочуобновлять только те элементы, которые в данный момент видны пользователю.

Я ищу правильный крючок, чтобы получить информацию, какая из этих Items в данный момент отображается изнутри Элемента, не полагаясь на информацию от родителей,Если бы они были все размещены в ListView делегатах, я мог бы использовать компоненты делегатов onCompleted и onDestroyed. Поскольку это не тот случай, я застрял в поиске, как получить эту информацию.

Я что-то здесь упускаю? Есть ли сигнал onPaintFinished или что-то подобное? Мой обходной путь - добавить эту логику в родительские контейнеры, но это было бы утомительно, поскольку существует несколько видов контейнеров, которые могут содержать эти элементы отображения.

1 Ответ

1 голос
/ 01 ноября 2019

Экземпляры, которые находятся на делегатах ListView, не будут существовать, пока они не окажутся в видимом диапазоне или диапазоне кэша вокруг визуальной области представления списка. Если делегат выходит за пределы этого диапазона, он уничтожается. Поэтому не нужно беспокоиться о скрытых там экземплярах.

Более того, элементы, которые в данный момент не видны, также не рисуются. Они не вводятся в граф сцены и, следовательно, не отображаются. Таким образом, экземпляры ваших предметов, появляющиеся на вкладках, которые в данный момент не являются текущими, также не будут отображаться. Тем не менее, эти предметы все же существуют, конечно.

Выяснить, является ли предмет эффективно видимым или нет, хотя это довольно сложная проблема. QML делегирует часть этого OpenGL (например, отсечение). Там нет отзывов о результате этого. Теоретически вы могли бы извлечь эту информацию из рендерера, но это потребовало бы ее настройки, а это очень сложно. Вы можете взглянуть на эвристику, которую GammaRay использует, чтобы предупредить о невидимых элементах. Возможно, вы можете черпать вдохновение из этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...