LINUX.ORG.RU

[Qt] Оптимизация перерисовки виджета при изменении его геометрии (resize(), move() и пр.)

 


0

1

Создаю программу для моделирования изменения энтальпийного (температурного, грубо говоря) поля при кондуктивной теплопередачи в массиве грунтов. Можете считать, для простоты понимания, что это CAD.

Там сцена и вью. В сцене лежит много-много кирпичиков. Кирпичики надо иногда, например, выделять. Для этого используется прямоугольное выделение. Прямоугольное выделение представлено как виджет, рисующийся во вьюпорте вью.

Проблема в том, что при изменении геометрии выделения (размеров или положения этого виджета), пускается paintEvent для области, являющейся окаймляющей старую и новую геометрию. При этом перерисовываются все кирпичики, лежащие и лежавшие только что под этим виджетом. А это долго, если их много (заметно от 1500).

Можно ли как-нибудь самому задавать QRegion, в котором должен пускаться paintEvent при resize/move?

Вот скриншот (для вашего вдохновения): http://rghost.ru/3347253/image.png

★★★★★

Последнее исправление: Obey-Kun (всего исправлений: 2)

Ответ на: комментарий от Kosyak

> Может лучше использовать QGraphicsRectItem с цветами из системной палитры?

Ну да, по идее есть резон использовать для инструмента выделения не виджет, лежащий во viewport, а унаследованную от QGraphicsRectItem ерунду. Но тогда возникает такая проблема — у выделения есть ушки, за которые его можно хватать и изменять размеры. Они должны рисоваться вне масштаба. Как этого добиться, если в сцену класть?

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Dendy

> а вообще всегда можно вызвать view->viewport()->update( myCustomRegion

при изменении геометрии виджета, лежащего во viewport, автоматически пукается update для региона, являющегося суммой предыдущей и новой геометрии.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Kosyak

> Может лучше использовать QGraphicsRectItem с цветами из системной палитры?

Может лучше использовать QGraphicsRectItem

да

с цветами из системной палитры?

нет

Obey-Kun ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.