2017-04-26 133 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(); 
} 

另一方面,如果你只是需要兩條平行線,那麼我認爲你唯一的選擇是畫兩條線。