QPainterPath形状联合(单笔划)

时间:2018-05-11 20:20:43

标签: c++ qt qgraphicsview qgraphicsscene qpainterpath

我正在尝试使用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));

这就是我得到的:

actual result

虽然我想获得一个单一的形状,只有一个连续的轮廓,如下:

desired result

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

  

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

请注意,如果您的路径中包含Bezier曲线,并且重置填充规则,则会导致Bezier曲线陷入混乱。但是,因为您没有使用这些功能(至少在您没有的示例中),simplified()就足够了。