0
我正在使用Qt的QPainter::drawLine
和QPainter::drawPolygon
函数在像素图上绘制线条。我想画一条边线颜色与线条颜色不同的线条。用边框线在QPixmap上绘制线条
我可以通过绘制两行不同宽度的笔来显示此效果。但它有点慢。
是否有任何其他方式可以在单个函数调用drawLine
上绘制它?
我正在使用Qt的QPainter::drawLine
和QPainter::drawPolygon
函数在像素图上绘制线条。我想画一条边线颜色与线条颜色不同的线条。用边框线在QPixmap上绘制线条
我可以通过绘制两行不同宽度的笔来显示此效果。但它有点慢。
是否有任何其他方式可以在单个函数调用drawLine
上绘制它?
您可以使用QPainterPath
这样做,尽管不是两支笔,而是使用笔和笔刷。吹一个可以完成工作的示例函数。
void drawLineWithBorder(QPainter& pt, const QPoint& p0, const QPoint& p1,
const QPen& borderPen, const QBrush& lineBrush, float width)
{
// Line vectors
QPointF v1(p1 - p0);
v1 /= sqrt(v1.x() * v1.x() + v1.y() * v1.y()); // normalized it
v1 *= width; // line thickness
QPoint v2(v1.y(), -v1.x()); // line rotated 90 degrees
// Draw a rotated rectangle to generate a 'line with borders'
// It needs to be closed in order to paint the inner region
QPainterPath path;
path.moveTo(p0);
path.lineTo(p1);
path.lineTo(p1 + v2);
path.lineTo(p1 + v2 - v1);
path.lineTo(p0);
pt.save(); // save current state of the painter
pt.setPen(borderPen);
pt.setBrush(lineBrush);
pt.drawPath(path);
pt.restore();
}
另一方面,如果你只是需要两条平行线,那么我认为你唯一的选择是画两条线。
长长的拉长的矩形... – CapelliC
多边形呢? –