0

我正在尝试创建两个形状的联合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));

这就是我得到的:

实际结果

而我想获得一个单一的形状,只有一个连续的轮廓,像这样:

期望的结果

我该如何解决这个问题?

4

1 回答 1

1

您可以使用QPainterPath::simplified()删除内部边缘:

返回此路径的简化版本。这意味着合并所有相交的子路径,并返回不包含相交边的路径。[...]

请注意,如果路径中有贝塞尔曲线,这可能会弄乱贝塞尔曲线,并且它会重置填充规则。但是,因为您没有使用这些功能(至少在您的示例中没有),所以simplified()就足够了。

于 2018-05-11T20:27:37.653 回答