Есть ли простой способ сделать прозрачным перекрывающуюся область между двумя полигонами? Желательно встроенные функции в виджетах Qt / 2D-графике Qt C ++ фреймворк. (не QML)
Я рендерил данные карты, извлеченные из Openstreetmap.org, и некоторые продвинутые отношения между способами (отрезки линий) представлены как внутренние и внешние пути, образующие многоугольники.
Например, у озера могут быть внешние пути, которые образуют многоугольник, и несколько внутренних путей, которые образуют острова внутри озера.
Я могу правильно построить внешние полигоны и внутренние полигоны отдельно, но я изо всех сил пытаюсь найти легко способ сделать область, которая перекрывается с внутренними многоугольниками, прозрачной.
На изображении ниже белые области — это отдельные многоугольники, нарисованные белым, но вместо этого они должны быть прозрачными участками озера / синего многоугольника.
Я попытался использовать QPainterPath для внешних полигонов и вызова
QPainterPath QPainterPath::subtracted(const QPainterPath &inner) const
но результатом стал пустой экран.
Должен ли я сам создавать новые полигоны перед рендерингом?
Должно ли работать решение QPainterPath, и я что-то напутал?
Есть ли какая-то магия, которую можно сделать с помощью QPen / QBrush для рисования перекрывающихся областей прозрачными?
Любые советы о том, как подойти к этому, высоко ценится.
Кажется, я испортил подход QPainterPath. Это работает сейчас.
Я работал с QPolygonF напрямую, так как он имеет метод subtracted (), похожий на QPainterPath. Однако реализация вычитаемых в QPolygonF левых артефактов в виде линий между начальной вершиной каждого внутреннего многоугольника и начальной вершиной внешнего многоугольника.
Использование QPainterPath :: addPolygon и выполнение вычитания работали безупречно.
Ссылка
https://bugreports.qt.io/browse/QTBUG-53720
http://www.qtcentre.org/threads/19463-Draw-polygon-with-holes
Других решений пока нет …