我对如何实现某种图形编辑器有一点疑问。 对于绘图我使用此方法: 首先,我检查是否单击鼠标左键,然后在我的QPixmap上的event-> pos()处绘制一个像素,然后调用update();重绘它。如果用按下的按钮移动鼠标,我也会在两个点之间的QPixmap上绘制线条(因为没有它只会有一些点)。它工作得很好,但我想知道是否有更优化的方法来做到这一点。这里有一些代码(我已经跳过了部分缩放,将像素之间的像素连接起来等等。)
void Editor::paintEvent(QPaintEvent *event)
{
painter.drawPixmap(QRect(0, 0, image.width() * zoom , image.height() * zoom),
image);
}
void Editor::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
setImagePixel(event->pos());
}
}
void Editor::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton)
{
setImagePixel(event->pos(), true);
}
}
void Editor::setImagePixel(const QPoint &pos)
{
QPainter painter(&image);
if(image.rect().contains(i, j))
{
painter.begin(&image);
painter.setPen(primaryColor);
painter.drawPoint(i, j);
painter.end();
}
}
答案 0 :(得分:1)
是的,我会使用QPainterPath及其API来绘制手工制作的形状。看看它的方法:moveTo()
和lineTo()
,它们可以让你摆脱绘图逻辑(缺少像素等)。与鼠标事件结合也很容易。
希望这会有所帮助。