[Interest] Asynchronously loading Qt Quick Items (without Loader)

Curtis Mitch mitch.curtis at theqtcompany.com
Wed Nov 25 23:14:30 CET 2015


Oh, so I have missed the point of it entirely. The usage of processEvents() in the example threw me off, as I somehow thought that it was necessary to control the whole incubation process.

Thanks! :)

________________________________________
From: Gianluca <gmaxera at gmail.com>
Sent: Wednesday, 25 November 2015 23:08
To: Curtis Mitch
Cc: interest at qt-project.org
Subject: Re: [Interest] Asynchronously loading Qt Quick Items (without Loader)

Hello Curtis,
looking at the documentation, I would suggest to create a subclass of QQmlIncubator and implent the statusChanged method with you code to execute when the object is ready.

http://doc.qt.io/qt-5/qqmlincubator.html#statusChanged

>From the documentation, it will be called whenever the status change and the default implementation do nothing. So, it’s really seems that has been put exactly for your purpose.

Ciao,
Gianluca.


Il giorno 25/nov/2015, alle ore 21:59, Curtis Mitch <mitch.curtis at theqtcompany.com> ha scritto:

>
> Hi.
>
> I'm playing around with a project that requires asynchronous loading of QQuickItems. Specifically, each item has some basic visuals, and some Box2D types to construct. The items should be loaded asynchronously as there will be a large amount of them, and they should only be loaded when the view is close by (the items are within a Flickable).
>
> I thought I'd use QQmlIncubator for this. Having never used it before, I went to the detailed description [1] to find an example:
>
> QQmlIncubator incubator;
> component->create(incubator);
>
> while (incubator.isReady()) {
>    QCoreApplication::processEvents(QEventLoop::AllEvents, 50);
> }
>
> QObject *object = incubator.object();
>
> My first thought is that the "Performance Considerations And Suggestions" documentation [2] explicitly suggests against such code, saying things like:
>
> "never manually spin the event loop"
>
> and:
>
> "Note: A pattern which is tempting, but should never be used, is creating your own QEventLoop or calling QCoreApplication::processEvents() in order to avoid blocking within a C++ code block invoked from QML. This is dangerous, because when an event loop is entered in a signal handler or binding, the QML engine continues to run other bindings, animations, transitions, etc. Those bindings can then cause side effects which, for example, destroy the hierarchy containing your event loop."
>
> I'd rather not have to handle all this stuff myself, if possible.
>
> So, is there a way to asynchronously create Qt Quick Items from a QQmlComponent (without using Loader), without having to write my own incubator? Or have I misunderstood the point of QQmlIncubator?
>
> The reason why I want to avoid Loader is that, from my experience with Qt Quick Controls, it doesn't perform so well with a large number of items.
>
> Cheers.
>
> [1] http://doc.qt.io/qt-5/qqmlincubator.html#details
> [2] http://doc.qt.io/qt-5/qtquick-performance.html#timing-considerations
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest




More information about the Interest mailing list