[Interest] 5.5/5.6 QMLEngine management
Bo Thorsen
bo at vikingsoft.eu
Mon Jan 11 07:53:23 CET 2016
Den 10-01-2016 kl. 03:21 skrev mark diener:
> Hello List:
>
> I have a couple of core QMLEngine questions:
>
> Basic Code Snippet:
>
> QQmlEngine geng ;
>
> QQmlComponent gcomp(&geng)
> gcomp.setData( ByteArrayofQML , QUrl() ) ;
> gcomp.create() -> Show the QML in the QML Engine
> if (gcomp.isError() == false) -> we have visible QML!
>
> 1) How does one cause all properties in the root context for QML
> engine be triggered to re-evaluate their bindings again. For example
> Text { text: gvariable }, it want text object to re-fetch its own
> values instead of pushing values with Qobject->setProperty(). Generic
> pull instead of specific push.
>
> Can I cause a disturbance in the QmlContext and that would trigger and
> "expensive" refetching of text values for example.
On one hand, this question doesn't make sense. QML vars are considered
changed immediately, and that's a basic design choice.
OTOH, it's very simple to do this yourself. Just create a function that
pulls in the new variable values. You might need a proxy object between
the real value place and the QML land, but other than that you need no
tricks for it.
> 2) How does one clear out everything loaded in the root QmlEngine context?
>
> What is the best way to clear the root context of qmlengine of
> everything prior to calling
> gcomp->setData() and gcomp->create( ) to load brand new QML into the QmlEngine?
>
> geng->clearComponentCache() ? Does this really flush everything out
> regardless of anything that is currently visible on-screen?
>
> I do not want to build up a pile of QObjects in the engine, I want
> them cleanly flushed out.
Again, there are ways you could do this. Store the set of accepted vars
and values and reset to exactly those when you want, for example.
But this idea smells badly of a fundamentally bad design. If you need to
get rid of variables, reset them, etc. then they probably shouldn't be
stored as context on the root engine. This sounds like one of the "how
do I do B" because you are doing "A" already questions, and the problem
is that "A" is wrong. We get those on this list all the time.
One idea I have used often is to have a backend object that is almost
the only object exposed to QML. Inside this one you can set variables on
the fly as you want. With the very limited amount of info you have given
here this seems like a much more appropriate direction for you.
Bo Thorsen,
Director, Viking Software.
--
Viking Software
Qt and C++ developers for hire
http://www.vikingsoft.eu
More information about the Interest
mailing list