2014-11-10 3 views
0

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

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

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

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

+0

Итак, вы рисуете речевой шар как две формы? Один для самого баллона, а другой для хвоста? Почему бы просто не объединить их обоих как один путь? – GoBusto

+0

Поскольку я хочу иметь возможность нарисовать хвост как кривую и позиционировать воздушный шар (который может быть эллипсом, квадратом, зубчатым краем или любым другим подклассом моего основного шарового класса) в произвольной точке. Найти последовательный метод представления баллона оказывается трудным. Если бы я мог просто нарисовать кривую, то эллипс тогда было бы проще – luckykaa

+0

Я сам не знаком с 'QPainterPath', но я знаю, что подобные графические API (такие как [Cairo] (http://cairographics.org) библиотека) часто позволяют вам иметь «подпункты» - возможно, вы могли бы нарисовать хвост и главный воздушный шар в виде двух закрытых подпутей в пределах одного «контейнерного» пути? Если это невозможно, попробуйте второй из двух вариантов, которые я предложил ниже. – GoBusto

ответ

1

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

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

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

1

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

// 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^