Чтобы обрезать QPainterPath с помощью QGraphicsItem

На снимке экрана ниже все узлы получены из QGraphicsItem, а все ребра нарисованы экземпляром QPainterPath.

(Цвет для ясности)

Возможно ли, чтобы узлы обрезали/скрывали края? В идеале я хотел бы, чтобы ребро было невидимым, как только оно «входит» в узел. Возможно ли это с QPainterPath или мне нужно использовать другой способ рисования путей?


person TeaOverflow    schedule 08.06.2012    source источник
comment
Можете ли вы просто заполнить путь рисования узла белым цветом и нарисовать их после краев? Это было бы довольно простым решением, если бы оно работало в вашей ситуации.   -  person Dave Mateer    schedule 08.06.2012
comment
@DaveMateer Ну, это несколько сложно. Мой алгоритм рисования сначала рисует узел, а затем все его входящие ребра. Можно ли как-то получить точку пересечения?   -  person TeaOverflow    schedule 13.06.2012


Ответы (1)


Если вы используете GraphicsLineItem вместо QPainterPath, то у вас есть доступ к setZValue, чтобы сделать это.

Я не сразу вижу способ сделать это с помощью QPainterPath.

person SquatcHman    schedule 08.06.2012
comment
-1 Это никак не решит проблему. Каждый узел будет состоять из 4 отдельных элементов сцены (по одному на каждое ребро), что сделает их невозможными для заполнения и резко увеличит количество шаблонов для записи. QGraphicsPolygonItem имело бы гораздо больше смысла, но даже в этом случае, если узел не будет заполнен цветом (как заметил Дэйв Мэтир), линии соединения все равно будут видны. - person cmannett85; 09.06.2012
comment
Узлы уже получены из QGraphicsItem. Быстрый хак заключается в использовании QGraphicsLineItem после заполнения фона в их классе узла. Лучшим вариантом, вероятно, будет проверить пример диаграммы из документации. qt-project.org/doc/qt-4.8/graphicsview-diagramscene. html - person SquatcHman; 11.06.2012