QPainterPath 形状联合(单笔画)
QPainterPath union of shapes (single stroke)
我正在尝试用 QPainterPath
创建两个形状的结合来绘制漫画气球:
const int kb = 4;
QRectF br = text_->boundingRect().adjusted(-kb, -kb, kb, kb);
// anchor on bottom side
qreal y = br.bottom();
qreal x = 0.5 * (br.left() - br.right()) + br.right();
const int kw = 6;
QPainterPath pTip;
pTip.moveTo(offset_);
pTip.lineTo(x - kw, y);
pTip.lineTo(x + kw, y);
pTip.lineTo(offset_);
QPainterPath pRect;
pRect.addRoundedRect(br, 2 * kb, 2 * kb);
shape_->setPath(pTip.united(pRect));
这是我得到的:
而我想获得一个单一的形状,只有一个连续的轮廓,像这样:
我该如何解决这个问题?
您可以使用 QPainterPath::simplified()
删除内部边缘:
Returns a simplified version of this path. This implies merging all subpaths that intersect, and returning a path containing no intersecting edges. [...]
请注意,如果您的路径中有贝塞尔曲线,这可能会弄乱它们,并且它会重置填充规则。但是,因为您没有使用这些功能(至少在您的示例中没有使用),simplified()
应该足够了。
我正在尝试用 QPainterPath
创建两个形状的结合来绘制漫画气球:
const int kb = 4;
QRectF br = text_->boundingRect().adjusted(-kb, -kb, kb, kb);
// anchor on bottom side
qreal y = br.bottom();
qreal x = 0.5 * (br.left() - br.right()) + br.right();
const int kw = 6;
QPainterPath pTip;
pTip.moveTo(offset_);
pTip.lineTo(x - kw, y);
pTip.lineTo(x + kw, y);
pTip.lineTo(offset_);
QPainterPath pRect;
pRect.addRoundedRect(br, 2 * kb, 2 * kb);
shape_->setPath(pTip.united(pRect));
这是我得到的:
而我想获得一个单一的形状,只有一个连续的轮廓,像这样:
我该如何解决这个问题?
您可以使用 QPainterPath::simplified()
删除内部边缘:
Returns a simplified version of this path. This implies merging all subpaths that intersect, and returning a path containing no intersecting edges. [...]
请注意,如果您的路径中有贝塞尔曲线,这可能会弄乱它们,并且它会重置填充规则。但是,因为您没有使用这些功能(至少在您的示例中没有使用),simplified()
应该足够了。