优化绘图QPixmap

Optimized drawing on QPixmap

本文关键字:QPixmap 绘图 优化      更新时间:2023-10-16

我有一个关于如何实现某种图形编辑器的小问题。对于绘画,我使用这种方法:首先我检查鼠标左键是否被点击,然后我在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();
    }
}

是的,我会使用QPainterPath及其API来绘制手工制作的形状。看看它的方法:moveTo()lineTo(),这将让你摆脱绘图逻辑(缺少像素等)。它也很容易与鼠标事件结合使用。

希望这对你有帮助。