- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
一段时间以来,我一直在使用 Qt/C++ 开发一个简单的绘画应用程序。
目前我正在使用 QPainter::drawLine() 来绘制,它工作正常。
我想做的是用像素图画笔绘图,这在某种程度上是我可以做到的。我可以使用 QPainterPath 和 QPainter::strokePath() 绘制单色填充像素图。我用带有像素图的画笔用笔在路径上描边。
如果您仍在阅读,我的问题是,如果我使用 QPen 和 QPainter::strokePath(),我会得到一 strip 有平铺画笔的线条。但我希望沿线绘制像素图。就像某些图像编辑器中基于图像的画笔一样。我可以使用 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.
}
最佳答案
没关系,我找到了解决方案 here
接受的答案显示了如何沿路径重复绘制像素图。那太棒了。作为引用,我将在此处复制代码:
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;
}
}
关于c++ - 在 Qt 中用像素图画笔画一条线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28269713/
我正在开发一个基于fabricjs 的图表工具。我们的工具有我们自己的形状集合,它是基于 svg 的。我的问题是当我缩放对象时,边框(描边)也会缩放。我的问题是:如何缩放对象但保持笔触宽度固定。请检查
我在 Canvas 上画线时遇到一点问题, 基本上我希望线条漂亮、柔软且半不透明,但 Canvas 似乎只想对最后渲染的线段执行此操作。 看看这里,您会看到最后绘制的线段很好,而且..我想要它)但是随
也许这是一个错误,但请检查一下。 https://codepen.io/Firsh/pen/LegGQq /* Only these work:*/ /* symbol{ overflow: visi
我已经在终端中启动了一个 python 脚本(该终端已关闭)并将其发送到后台。现在这个程序需要一些来自键盘的输入并一直等待。如何将输入“y\n”(字母“y”后跟一个 Enter)发送到该程序?假设它的
我想实现这样的效果: 有人知道如何在 Canvas 上画这样一条线吗? 最佳答案 再靠近一点: chalkPaint = new Paint(); chalkPaint.setStyl
我建立了一个very simple Twitter Instant Search为了好玩,使用 jQuery 和 PHP。我将一个事件绑定(bind)到搜索表单上的 keyup,并对 PHP 页面进行
使用通用 Windows 平台 (UWP) 使用 InkCanvas 控件 我似乎无法确定在使用 InkCanvas 时删除墨迹笔划的正确方法 - 有一个可以处理的事件“StrokeErased”。
我是一名优秀的程序员,十分优秀!