Как ограничить рисование в QGraphicsScene определенной областью?

У меня есть QChart с QLineSeries. Чтобы добавить в диаграмму пользовательские графические элементы, я использую базовый QGraphicsScene диаграммы и его соответствующиеadd* методы.

Проблема в том, что область QGraphicsScene больше, чем область построения QChart, поэтому элементы QGraphicsItems, добавленные непосредственно в сцену, могут быть нарисованы за пределами области построения. Например:

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

Интересно, как лучше всего ограничить рисование моих пользовательских элементов областью построения диаграммы?

Говоря лучше, я имею в виду:

  • Легко управлять. Это диаграмма в реальном времени с множеством настраиваемых графических элементов, которые добавляются и удаляются с течением времени.
  • Не влияет на производительность.

Должен ли я добавить прозрачный элемент (виджет?) Поверх области построения диаграммы (есть plotAreaсвойство для QChart, которое, я полагаю, определяет его), включить QGraphicsItem::ItemClipsChildrenToShape а затем использовать его как родительский для моих пользовательских элементов?

Есть ли другие способы? Что мне лично не нравится, так это то, что у вас есть +1 слой в стеке QGraphicsItems. Не то чтобы мне сейчас больно, но, вероятно, это может случиться в будущем, когда вы добавляете больше элементов в диаграмму, а затем вам нужно взаимодействовать с ними. Z-порядок, распространение событий, все это может усложниться. И я предпочитаю, чтобы это было просто.

0 ответов

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