Трассировка контура с использованием Qt Graphics

Я создаю редактор комиксов. Я хочу иметь возможность использовать некоторые довольно сложные настраиваемые формы для речевых шаров.

Я могу нарисовать хвост, а затем нарисовать воздушный шар, но это означает, что у меня есть контур внутри фигуры, и я хочу его только по краю.

Я предположил QPainterPath::simplified() решит проблему, но, похоже, ничего не сделает.

На данный момент моя лучшая идея — нарисовать фигуру с толстым контуром, а затем нарисовать ее снова без контура, но я не думаю, что это сработает для контуров «нулевой ширины».

0

Решение

Я могу думать о двух возможных решениях здесь:

  • Нарисуйте и «хвост», и главный «шарик» в виде единой фигуры. В этом случае вы просто нарисуете одну фигуру с одним контуром и одной заливкой.
  • Нарисуйте их отдельно, но дважды. Сначала нарисуйте «расширенную» версию фигур черным, а затем поверх нее нарисуйте «нормальную» версию фигур белым. Вы вообще не будете рисовать «линии» — «расширенная» версия заливки будет служить той же цели.

Первый метод позволил бы использовать альтернативные стили линий (пунктирные или волнистые линии), но последний позволил бы слегка сместить «контур», чтобы он казался более толстым вокруг одних краев и более тонким вокруг других.

1

Другие решения

Оказывается QPainterPath::simplified() работает. Это зависит от того, рисую я по часовой стрелке или против часовой стрелки (я думаю, что это работает, когда рисуется по часовой стрелке), что, я полагаю, связано с тем, как работает Qt Winding Fill.

// create a path representing the bubble and its "tail"QPainterPath tail = tail.shape();
tail.addPath(bubble.shape());
tail.setFillRule(Qt::WindingFill);

painter->drawPath(tail.simplified);
1

По вопросам рекламы [email protected]