2017-04-26 129 views
0

我正在使用Qt的QPainter::drawLineQPainter::drawPolygon函数在像素图上绘制线条。我想画一条边线颜色与线条颜色不同的线条。用边框线在QPixmap上绘制线条

我可以通过绘制两行不同宽度的笔来显示此效果。但它有点慢。

是否有任何其他方式可以在单个函数调用drawLine上绘制它?

+0

长长的拉长的矩形... – CapelliC

+0

多边形呢? –

回答

0

您可以使用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(); 
} 

另一方面,如果你只是需要两条平行线,那么我认为你唯一的选择是画两条线。