[Development] Deprecating modules with 5.5
Simon Hausmann
simon.hausmann at theqtcompany.com
Fri Feb 6 08:52:01 CET 2015
On Thursday 5. February 2015 23.08.03 Jaroslaw Staniek wrote:
> On 5 February 2015 at 16:44, Simon Hausmann
>
> <simon.hausmann at theqtcompany.com> wrote:
> > On Thursday 5. February 2015 16.32.08 Jaroslaw Staniek wrote:
> >> On 3 February 2015 at 09:50, Hausmann Simon
> >>
> >> <Simon.Hausmann at theqtcompany.com> wrote:
> >> > Hi,
> >> >
> >> > Functionality wise, what type of "class" do you wrap with QScriptClass?
> >>
> >> Examples (you can guess from what project by looking at my footer):
> >> - Light data types (anything you see in databases and isn't mapping to
> >> javascript types). Long long?
> >> - Any very numerious non-QObject objects or calculated entities and/or
> >> properties that have no their structures at all. Thing about a
> >> database record accessible by record.<fieldname>.
> >
> > For those, would the new value type bindings be a sufficient replacement?
> > See also
> >
> > http://doc-snapshot.qt-project.org/qt5-dev/qtqml-cppintegration-data.html#
> > value-types
> >
> > Once your type is a Q_GADGET you should be able to make a copy of it
> > visible in JavaScript as easy as
> >
> > QJSValue value = engine.toScriptValue(myValueType);
>
> Thanks, I'll analyze that. Quick look make me unsure about one thing,
> Q_PROPERTY is a compile-time declaration. I'd like to add
> properties/members dynamically at run time and I'd like to of course
> avoid calling eval() for that.
Hmm, we currently only allow that for QObject bindings. So if you do
QJSValue wrapper = engine.newQObject(someQObject);
then you can add arbitrary properties to that JS object simply via
wrapper.setProperty("myExtraProperty", 42);
and it will be a dynamically added property if there exists no Q_PROPERTY.
The value of that property is accessible from C++ via the QJSValue API, i.e.
if you have a pointer to the QObject you can do
QObject *thatObject = ...
QJSEngine *engine = qjsEngine(thatObject);
QJSValue blah = engine->newQObject(thatObject).property("myExtraProperty");
In theory we could add the same feature to the value types, but I'm hesitant
about it. With QObject the ownership semantics are explicitly shared, so it's
clear (after learning the API) that you're operating on an object shared
between C++ and JavaScript. With value types the engine will take a copy of
the data when you do engine->toScriptValue(something) so it's not clear what
should happen with those "dynamically" added properties when going back to
C++.
So if you can apply the use of dynamic properties to QObject based types, then
I think you should be good to go.
Simon
More information about the Development
mailing list