[Interest] Questions about QML

Oleg Shparber trollixx at gmail.com
Wed Oct 1 06:25:56 CEST 2014


Hi Sze Howe,


On Tue, Sep 30, 2014 at 7:32 PM, Sze Howe Koh <szehowe.koh at gmail.com> wrote:

> Hi,
>
> On 1 October 2014 09:05, Oleg Shparber <trollixx at gmail.com> wrote:
> > Hi,
> >
> > I am working on a QML plugin which should provide a set of "modules" with
> > functionality similar to some of built-in Node.js modules. The
> requirement
> > also is that third-party JS libraries created for Node.js should also
> work
> > out of the box. While much of the work is straightforward, there are
> still
> > some questions I cannot find solutions for.
> >
> > 1. For some reason when I am setting a property on
> QJSEngine::globalObject()
> > in my plugin it does not become available in QML. Example:
> >
> > static QObject *singletontype_provider(QQmlEngine *engine, QJSEngine
> > *scriptEngine)
> > {
> >     engine->globalObject().setProperty("prop1", "aaa");
> >     scriptEngine->globalObject().setProperty("prop2", "aaa");
> >     ...
> > }
> >
> > I've tried with both QJSEngine and QQmlEngine passed to the plugin, but
> > neither works.
> >
> >
> > 2. Can I set new properties of the global object in JS/QML? Trying to set
>
> (1+2) That's not possible with the QML JavaScript engine. According to
> "JavaScript Environment Restrictions" in
> http://qt-project.org/doc/qt-5/qtqml-javascript-hostenvironment.html:
>
> "In QML, the global object is constant - existing properties cannot be
> modified or deleted, and no new properties may be created."
>
>
Thanks, I missed that somehow.



> Side note: The JavaScript engine implemented in Qt is designed
> specifically for QML code in mind. That's one of the main reasons for
> dropping V8 in favour of a custom JavaScript engine.
>
> I don't know the answer to your other questions, so I'll let others answer
> them.
>
>
> > 3. How can I make my C++ type creatable with "new" in QML/JS? I want to
> > provide several new JS types, but not QML types.
> >
> >
> > 4. Is there a way to provide my own container type? Overloading [] with
> > Q_INVOKABLE does not work. I'd like to have a custom buffer type which I
> can
> > use as myBuffer[index].
>
> (4) How does that differ from a regular JavaScript array?
>
>
I need to create a type to store binary data.  Something like
http://nodejs.org/api/buffer.html. So, JS Array is not an option.


> > 5. Is QJSEngine::evaluate() the only method to execute a separate JS
> file?
> >
> > 6. Can I somehow create a new callable QJSValue using QMetaMethod or
> lambda
> > function? It's possible to do from JS side (e. g.
> > NewType.prototype.newMethod = CppObject.method; works), but I want to do
> it
> > from C++ side.
>
> (6) May I ask why you want to do it from the C++ side?
>

I want to extend prototypes of JS Objects with C++ methods which are not
visible from QML/JS.


>
>
> Regards,
> Sze-Howe
>

Best,
Oleg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20140930/a9edceb0/attachment.html>


More information about the Interest mailing list