Прозрачность перекрывающихся полигонов в Qt

Есть ли простой способ сделать прозрачным перекрывающуюся область между двумя полигонами? Предпочтительно встроенные функции в рамках виджетов Qt / Qt 2D graphics C++. (не QML)

Я рендерил данные карты, извлеченные из Openstreetmap.org, и некоторые продвинутые отношения между способами (отрезки линий) представлены как внутренние и внешние пути, образующие многоугольники.

Например, у озера могут быть внешние пути, которые образуют многоугольник, и несколько внутренних путей, которые образуют острова внутри озера.

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

На изображении ниже белые области - это отдельные многоугольники, нарисованные белым, но вместо этого они должны быть прозрачными участками озера / синего многоугольника.

Белый должен быть прозрачной областью синего цвета

Я попытался использовать QPainterPath для внешних полигонов и вызова

QPainterPath QPainterPath::subtracted(const QPainterPath &inner) const

но результатом стал пустой экран.

Должен ли я сам создавать новые полигоны перед рендерингом?

Должно ли работать решение QPainterPath, и я что-то напутал?

Есть ли какая-то магия, которую можно сделать с помощью QPen/QBrush для рисования перекрывающихся областей прозрачными?

Любые советы о том, как подойти к этому, высоко ценится.

1 ответ

Решение

Кажется, я испортил подход QPainterPath. Это работает сейчас.

Я работал с QPolygonF напрямую, так как он имеет метод subtracted(), похожий на QPainterPath. Однако реализация вычитаемых в QPolygonF левых артефактов в виде линий между начальной вершиной каждого внутреннего многоугольника и начальной вершиной внешнего многоугольника.

Использование QPainterPath::addPolygon и выполнение вычитания работали безупречно.

Ссылка https://bugreports.qt.io/browse/QTBUG-53720 http://www.qtcentre.org/threads/19463-Draw-polygon-with-holes

Другие вопросы по тегам