QPixmap上的优化绘图

时间:2011-12-04 17:09:18

标签: c++ qt drawing

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

1 个答案:

答案 0 :(得分:1)

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

希望这会有所帮助。