Обновление в QGRaphicsView
отличается от обновления в QGraphicsScene
. Обновление в представлении вызвано необходимостью перекрасить представление. С или без изменения сцены. Это типично из окна (изменение размера) и просмотра изменений (прокрутка). Изменение сцены также приведет к обновлению представления.
Изменение сцены - это изменение содержимого сцены. Как добавление или удаление элемента, масштабирование или перевод преобразования. Это издаст сигнал changed()
. Все виды, отображающие эту сцену, также обновляются для отображения.
Например. Прокрутка вида не приведет к обновлению сцены, так как ничего в сцене не изменилось. Функция paint()
элементов в сцене будет вызвана для перекраски. Но сигнал changed()
не будет излучаться со сцены.
Если вы, например, изменили масштаб сцены, изменилась вся сцена. В дополнение ко всему перекрашиванию сцена будет излучать сигнал changed()
и указывает, что вся сцена изменилась. Но если вы добавляете новый элемент на сцену, функция change () должна указывать только прямоугольник нового элемента.
Если вы хотите знать, какую часть сцены необходимо перекрасить, в дополнение к вызову QGraphicsView::setViewportUpdateMode()
, вам необходимо установить фильтр событий в представлении и проверить наличие QEvent::Paint
. Обратите внимание, что регион и прямоугольник в QPaintEvent находятся в локальной координате представления, которая может отличаться от сцены. Но QGraphicsView
имеет много картографических функций для преобразования.