QGraphicsScene :: change () всегда возвращает один прямоугольник с размером окна приложения - PullRequest
0 голосов
/ 05 февраля 2011

В приложении Qt 4.7.1 для Windows слот, который подключен к QGraphicsScene :: change (), запускается, как и ожидалось, но число грязных областей всегда равно 1, а размер прямоугольника, который я получаю, всегда совпадает с окном моего приложения. Я попытался вызвать QGraphicsView :: setViewportUpdateMode (QGraphicsView :: MinimalViewportUpdate); но это не помогло.

Есть ли способ сказать Qt, чтобы он давал мне только те области страницы, которые изменились?

1 Ответ

2 голосов
/ 06 февраля 2011

Обновление в QGRaphicsView отличается от обновления в QGraphicsScene. Обновление в представлении вызвано необходимостью перекрасить представление. С или без изменения сцены. Это типично из окна (изменение размера) и просмотра изменений (прокрутка). Изменение сцены также приведет к обновлению представления.

Изменение сцены - это изменение содержимого сцены. Как добавление или удаление элемента, масштабирование или перевод преобразования. Это издаст сигнал changed(). Все виды, отображающие эту сцену, также обновляются для отображения.

Например. Прокрутка вида не приведет к обновлению сцены, так как ничего в сцене не изменилось. Функция paint() элементов в сцене будет вызвана для перекраски. Но сигнал changed() не будет излучаться со сцены.

Если вы, например, изменили масштаб сцены, изменилась вся сцена. В дополнение ко всему перекрашиванию сцена будет излучать сигнал changed() и указывает, что вся сцена изменилась. Но если вы добавляете новый элемент на сцену, функция change () должна указывать только прямоугольник нового элемента.

Если вы хотите знать, какую часть сцены необходимо перекрасить, в дополнение к вызову QGraphicsView::setViewportUpdateMode(), вам необходимо установить фильтр событий в представлении и проверить наличие QEvent::Paint. Обратите внимание, что регион и прямоугольник в QPaintEvent находятся в локальной координате представления, которая может отличаться от сцены. Но QGraphicsView имеет много картографических функций для преобразования.

...