рисование «предварительного просмотра» линии в простом графическом редакторе - PullRequest
1 голос
/ 15 июля 2011

Рисование линии с помощью QPainter.onMousePressed: сохранение (x0, y0) onMouseReleased: QPainter.drawLine (x0, y0, x1, y1)

Я хочу увидеть предварительный просмотр строки onMouseMove.Но если перерисовать всю картину, это будет слишком долго.Как это сделать?

Ответы [ 2 ]

2 голосов
/ 16 июля 2011

Используйте QGraphicsScene. Нарисуйте фоновое изображение как QGraphicsPixmapItem и добавьте предварительный просмотр линии как QGraphicsLineItem. Когда линия будет принята, удалите элемент и нарисуйте его на растровом изображении. Вы можете настроить графическую сцену на использование ускорения OpenGL, http://doc.qt.nokia.com/qq/qq26-openglcanvas.html

1 голос
/ 18 июля 2011

Я бы пошел просто для первого выстрела.

Если вы не используете аппаратный рендеринг с ускорением, вы можете выполнить рендеринг в QPixmap, который вы сохранили как элемент вашего экземпляра (назовем его buffer).

QPixmap* buffer = new QPixmap( this->size());
QPainter painter( buffer);
painter.draw(...) //draw your stuff in it

Затем при рисовании, когда вы отслеживаете движения мыши, визуализируйте ваш buffer в качестве фона (должен быть очень быстрым, поскольку не требуется никакого преобразования / смешивания), а затем нарисуйте динамическую линию сверху.1010 *

Вы должны следить за загрязненностью области рисования, чтобы при необходимости повторно визуализировать buffer (изменить размер / добавить материал / ...).

ПРИМЕЧАНИЕ: если вы используете OpenGL, то же самое можно сделать с буфером рендеринга или пиксельными буферами ... смотрите пример Qt PixelBuffer

...