QPainterPath объединение фигур (один штрих) - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь создать объединение двух фигур с помощью 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 голосов
/ 11 мая 2018

Вы можете использовать QPainterPath::simplified() для удаления внутренних ребер:

Возвращает упрощенную версию этого пути.Это подразумевает объединение всех подпутей, которые пересекаются, и возврат пути, не содержащего пересекающихся ребер. [...]

Обратите внимание, что это может испортить кривые Безье, если они есть на вашем пути, и что оно сбрасывает правило заполнения.Однако, поскольку вы не используете эти функции (по крайней мере, в том примере, который у вас есть), simplified() должно быть достаточно.

...