C++ QPixmap上的优化绘图

C++ QPixmap上的优化绘图,c++,qt,drawing,C++,Qt,Drawing,我有一个关于如何实现某种图形编辑器的小问题。 对于绘图,我使用以下方法: 首先,我检查是否单击了鼠标左键,然后在QPixmap上的event->pos()处绘制一个像素,然后调用update();重新绘制它。如果按下按钮移动鼠标,我还会在QPixmap上画两个点之间的线(因为如果没有它,只会画一些点)。它工作得很好,但我想知道是否有更优化的方法来实现这一点。下面是一些代码(我跳过了缩放、将丢失的像素连接到像素之间等部分) 是的,我会使用QPainterPath及其API来绘制手工形状。看看它的方

我有一个关于如何实现某种图形编辑器的小问题。 对于绘图,我使用以下方法: 首先,我检查是否单击了鼠标左键,然后在QPixmap上的event->pos()处绘制一个像素,然后调用update();重新绘制它。如果按下按钮移动鼠标,我还会在QPixmap上画两个点之间的线(因为如果没有它,只会画一些点)。它工作得很好,但我想知道是否有更优化的方法来实现这一点。下面是一些代码(我跳过了缩放、将丢失的像素连接到像素之间等部分)


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


希望这有帮助

哇。。。非常感谢,这真的很有帮助我很高兴我不用再发明轮子了。祝你今天愉快。还有一个问题。我试着用不同宽度的钢笔。但是它看起来不太好看,像这样->。我想这是因为我一直在画很多路径。我怎样才能摆脱这个问题?您是否尝试过
QPainter::setRenderHint(QPainter::antialasing,true)
?我不太明白我一直在画很多路径,但我不确定它是否与渲染结果有关,它看起来更糟(线条很好,但有些点的不透明度不同)。我在MouseMoveEvent的当前事件->pos()和之前的事件->pos()之间绘制路径,我将其存储在QSize项中。嗯,我真的不知道你的应用程序中发生了什么,但我建议使用QPen的CapStyle和JoinStyle提示。这是我最后的建议,因为我猜不出到底发生了什么。关于抗锯齿提示;看到一些不透明度不同的点是很正常的,这甚至是事情的原理,这也是我们通常要寻找的。也许你的作曲方式选择得不好,不知道。。。
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();
    }
}