[英]Drawing a line with a pixmap brush in Qt?
有一段时间我正在使用Qt / C ++开发一个简单的绘图和绘画应用程序。
目前我正在使用QPainter :: drawLine()绘制,它工作正常。
我想要做的是使用pixmap画笔绘制,这是我能做的。 我可以使用QPainterPath和QPainter :: strokePath()绘制单色填充像素图。 我使用带有像素图的画笔用笔笔划道路。
如果你还在阅读,我的问题是,如果我使用QPen和QPainter :: strokePath(),我得到一个平铺刷线。 但是我想沿着线绘制像素图。 就像某些图像编辑器中基于图像的画笔一样。 我可以用drawRect()做到这一点,但这会将pixmaps分开。
如果你从我写的胡言乱语中理解我的问题,我怎样才能用像素笔刷画一条线?
编辑:这是我目前所做的事情:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.