Прозрачность перекрывающихся полигонов в 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