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
多邊形呢? –