在简单的图形编辑器中绘制线的“预览”

时间:2011-07-15 15:36:10

标签: c++ qt drawing

使用QPainter绘制线条。 onMousePressed:保存(x0,y0) onMouseReleased:QPainter.drawLine(x0,y0,x1,y1)

我想查看onMouseMove行的预览。但是,如果将重绘所有图片,它将会太长。 怎么做?

2 个答案:

答案 0 :(得分:2)

使用QGraphicsScene。将您的背景图片绘制为QGraphicsPixmapItem,并将线条预览添加为QGraphicsLineItem。当该行被接受时,删除该行项目并将其永久地绘制在像素图上。您可以将图形场景设置为使用OpenGL加速,http://doc.qt.nokia.com/qq/qq26-openglcanvas.html

答案 1 :(得分:1)

第一次拍摄我很简单。

如果您没有使用任何硬件加速渲染,则可以在QPixmap中呈现您保存为实例成员的内容(让我们称之为buffer)。

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

然后在绘画时跟踪鼠标移动时将buffer渲染为背景(因为不涉及转换/混合,应该非常快)然后在顶部绘制动态线。

QPainter painter( this);
painter.drawPixmap( rect(), *buffer, rect());
painter.drawLine(...)

您必须跟踪油漆区域的肮脏程度,以便在需要时重新渲染buffer(调整大小/添加材料/ ...)。

注意:如果您使用OpenGL,可以使用渲染缓冲区或像素缓冲区来完成同样的事情...请参阅Qt PixelBuffer示例