使用QPainter绘制线条。 onMousePressed:保存(x0,y0) onMouseReleased:QPainter.drawLine(x0,y0,x1,y1)
我想查看onMouseMove行的预览。但是,如果将重绘所有图片,它将会太长。 怎么做?
答案 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示例