C++ 在Qt中使用pixmap笔刷绘制直线?

C++ 在Qt中使用pixmap笔刷绘制直线?,c++,qt,drawing,qpixmap,C++,Qt,Drawing,Qpixmap,一段时间以来,我一直在用Qt/C++开发一个简单的绘图和绘画应用程序 目前我正在使用QPaint::drawLine()进行绘制,效果很好 我想做的是用pixmap画笔画画,我可以这样做。我可以使用QPainterPath和QPainter::strokePath()绘制单色填充的像素贴图。我用一支笔用画笔和pixmap画出路径 如果您还在阅读,我的问题是,如果我使用QPen和QPaint::strokePath()我会得到一条带有平铺笔刷的线。但是我想让像素图沿着这条线画。就像某些图像编辑器中

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

目前我正在使用QPaint::drawLine()进行绘制,效果很好

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

如果您还在阅读,我的问题是,如果我使用QPen和QPaint::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());
}
这就是我所尝试的:

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
}
为了沿着鼠标移动绘制一个像素图,我尝试了

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.
}

没关系,我找到了解决办法

接受的答案显示了如何沿路径重复绘制像素贴图。太好了。为了便于参考,我将代码复制到这里:

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;
    }
}
QPointF lastPosition,currentPosition;
间隙;
作废提款(){
QPainterPath路径;
路径。移动到(最后位置);
path.lineTo(当前位置);
qreal length=path.length();
qreal pos=0;
while(pos
它的可能重复是可能的重复,因为答案两者都适用,是的,但问题和标题有点不同,我认为如果您正在寻找pixmap笔刷的答案,在谷歌搜索中会更容易找到。一方面,在我寻找答案的过程中,我找不到另一个答案。在我向StackOverflow注册后,我看到了它。这是同一个问题,但呈现方式不同。事实上,你的问题措辞更为恰当。