在 Qt 中用像素图画笔画一条线?

4 c++ qt drawing qpixmap

一段时间以来,我正在使用 Qt/C++ 开发一个简单的绘图和绘画应用程序。

目前我正在使用 QPainter::drawLine() 进行绘制,并且工作正常。

我想做的是用像素图画笔绘图,这是我可以做到的。我可以使用 QPainterPath 和 QPainter::strokePath() 绘制单色填充的像素图。我使用画笔和像素图用笔描画路径。

如果您仍在阅读,我的问题是,如果我使用 QPen 和 QPainter::StrokePath() 我会得到一条带有平铺画笔的线。但我希望像素图沿着线绘制。就像某些图像编辑器中基于图像的画笔一样。我可以使用 drawRect() 来做到这一点,但这会将像素图分开。

如果你从我写的乱码中理解了我的问题,我怎样才能用像素图画笔画一条线呢?

编辑:这是我目前所做的:

void Canvas::mouseMoveEvent(QMouseEvent *event)
{
    polyLine[2] = polyLine[1];
    polyLine[1] = polyLine[0];
    polyLine[0] = event->pos();

    //Some stuff here
    painter.drawLine(polyLine[1], event->pos());
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

void Canvas::mouseMoveEvent(QMouseEvent *event)
{
    QPen pen(brush, brushSize, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin);
    //Some stuff here
    path.lineTo(event->pos());
    painter.strokePath(path, pen); 
    //This creates a fine line, but with a tiled brush
}
Run Code Online (Sandbox Code Playgroud)

为了沿着鼠标移动绘制像素图,我尝试过

void Canvas::mouseMoveEvent(QMouseEvent *event)
{
    //Some stuff
    QBrush brush(QPixmap(":images/fileName.png"));
    painter.setBrush(brush);
    painter.setPen(Qt::NoPen);
    painter.drawRect(QRect(event->pos() - brushSize / 2, event->pos() - brushSize / 2, brushSize, brushSize));
    //This draws the pixmaps with intervals.
}
Run Code Online (Sandbox Code Playgroud)

小智 5

没关系,我在这里找到了解决方案

接受的答案显示了如何沿着路径重复绘制像素图。那太棒了。作为参考,我将在这里复制代码:

QPointF lastPosition, currentPosition;
qreal spacing;

void draw() {
    QPainterPath path;
    path.moveTo(lastPosition);
    path.lineTo(currentPosition);
    qreal length = path.length();
    qreal pos = 0;

    while (pos < length) {
        qreal percent = path.percentAtLength(pos);
        drawYourPixmapAt(path.pointAtPercent(percent)); // pseudo method, use QPainter and your brush pixmap instead
        pos += spacing;
    }
}
Run Code Online (Sandbox Code Playgroud)