2013-03-22 3 views
0

Я бы хотел нарисовать только новые объекты, а не перерисовывать всю графику. Это делается с помощью QPainter, например, на рисунке. QWidget или другое простое QPaintDevice в событии paintEvent().Как добавить новые объекты в QPainter?

Но какое устройство для рисования или другой объект можно использовать для добавления новых точек в существующие, вместо того чтобы рисовать все снова и снова?

ответ

2

По сути, сказал Рето, со следующими дополнительными соображениями:

  1. PaintDevices, которые можно использовать в качестве кэш-памяти: http://qt-project.org/doc/qt-4.8/qpaintdevice.html перечислены возможные варианты на paintDevices, которые могут быть окрашены в использовании QPainter. Те, которые вы ищете, вероятно: QImage, QPixmap, QPicture и даже связанные с OpenGL PaintDevices, если вы используете аппаратные ускоренные виджеты. QImage рекомендуется в случае, если вы собираетесь выполнить команду blit и нуждаетесь в прямом доступе к пиксельным данным, но в противном случае для простых операций QPainter QPixMap равен faster.

  2. На самом деле, нарисовать новые точки из кеша, которые у вас есть: взгляните на соответствующий рисунок {Image/Picture/Pixmap} api's из QPainter, который вы можете использовать для рисования PaintDevice, на который вы клонировали первое место. Используйте QPaintEvent::region из paintEvent, полученный в вызове paintEvent виджета, чтобы получить прямоугольник, который вам нужно скопировать из кеша, имея в виду, что если вы отправляете запросы на обновление самостоятельно, используйте функцию обновления appropriate, чтобы вызвать paintEvent ,

1

Используйте QImage как кэш. Итак, сначала нарисуйте исходные «точки» на изображении, затем нарисуйте изображение в виджет. При получении новых «точек» нарисуйте новые «точки» на изображении и покрасьте изображение в виджет.