[Interest] Clipping QGraphicsItems in a QChart

Yuri Sukhov yuri.sukhov at gmail.com
Sat Dec 14 21:11:37 CET 2019


Hi,

I am using QChart for a real-time plot. The x-axis is a datetime axis,
the y-axis is a value axis. As you can expect with the real-time plot,
the window moves right on the x-axis ahead of time, and up/down on the
y-axis as the max/min values change.

As the window moves, the line series objects, managed by the QChart,
are correctly painted inside the plotArea. But as I add custom
QGraphicsItems to the scene, they can be partially painted outside the
plotArea, because the scene area is bigger than the QChart's plotArea.

An obvious solution would be to use clipping, and it worked good
during my test. I've reimplemented the paint() method for my custom
QGraphicsItems and used setClipRect() method on the painter with the
QChart's plotArea rect. But what bothers me in this approach is that,
whenever I read about clipping in the docs, it says that this
operation is expensive and affects performance.

I wonder, how expensive is it? Does clipping affects performance in
some specific scenarios only, or should it be avoided in general? I've
seen the warning in the docs, that it should not be used, if possible,
but there is no further details.

I also looked at the QCharts source, and I can see
painter->setClipRect(clipRect) in the LineChartItem::paint(), so, I
suppose, QChart is using exactly the same approach for keeping
graphics objects inside the plot area. This sort of contradicts the
recomendation regarding clipping in the docs, isn't it?

If not clipping, I've also been playing with managing the custom
QGraphicsItems myself and hiding them, when the item's coordinates go
outside of QChart's plotArea, but this requires more code, might be
more error-prone, and might not necessarilly be faster as the number
of items grows.

I would appreciate any thoughts on using clipping and/or ideas,
regarding alternative approaches for painting QGraphicsItems inside
the QChart's plotArea.

Regards,
Yuri.


More information about the Interest mailing list