[Interest] [QGV] Asynchronous painting of millions QGPathItem

Ch'Gans chgans at gna.org
Thu Sep 8 04:17:20 CEST 2016


Hi there,

I'm currently working on a Gerber viewer (Gerber is an old file format
still widely used in the electronics PCB manufacturing industry,
dating as far back as the old photo-plotter methods), some of these
files can get pretty big and I end up with a scene that contains up to
2 millions QGraphicsPathItem (biggest one so far, but i'm expected
even bigger, maybe 10 millions would be an absolute limit).
These huge files are more the exception than the rule, i still want
nonetheless my GUI app to be usable.
A typical usage is to render several file in a single QGV by
super-imposing them as "layers".
After profiling and optimising all the non-gui part of my app, my
bottle-neck is now QGS/QGV painting time (QGScene insert time is not
too bad at that stage). I haven't started to address this (I could try
to implement aggressive caching to start with), because I'm happy to
have that as a use case for rendering the view in a asynchronous way.

By asynchronous, I mean that I want my GUI to not be completely frozen
during the painting time (we're talking 10's of seconds). Of course
i'm not expecting to be able to give the user full access to the GUI,
I simply want to give the user feedback about my
parsing-processing-rendering-painting pipeline.
So far, I've used Qt Concurent for the parsing, processing and
pre-rendering parts, but once this part is finished, the QGraphicsView
very first painting kicks in and freeze the whole app.

It is the first time that I have to deal with multi-threading that
would run GUI/Widget business. And I'm not sure how to tackle this.

Ideally, I would like something similar to QtCreator progress bars
(parsing cmake/qmake/qbs, scanning for auto-test, indexing code model,
...). But I'll be happy to start with a small modal dialog showing the
progress for each step/file (parse a file, process the commands,
post-process/aggregate into QGS, paint it into QGV).
I have a similar use case for exporting the QGS to images, pdf and svg.

So far i've found only discussion about optimising the item painting,
but nothing about running it in a separate thread.

So here am I, does anyone had to deal with this kind of situation in
the past and is willing to share feedback, advice or comment on the
topic?

Thanks in advance,
Chris.

PS: My application is currently able to display such gigantic scenes,
it just take some time to render (and swallow lot of RAM), and make
the mouse-wheel based zooming particularly slow, but with a bit of
patience the result is actually quite amazing. Qt rocks!



More information about the Interest mailing list