Re: [Interest] Import C++ types to Javascript
First, try removing the .pragma library this make the script load before any engine I think and cannot use any Qml import at least never got it to work properly to create or import anything with it, you can have object pass as arg to you to do so. Once you got it working try to put it back to see if it cause you some pain (in that case it is, just a tips to understand it's effect). Second the Haser is not asingleton nor an instance, so you cannot call the slot or Q_INVOKABLE on it. Use Qt.createComponent() and Qt.createQmlObject() to create an object instance. for more info on javascript to create qml object see: http://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html Ex (you need a parent: function hash(str, parentItem) { var hasherObj = Qt.createQmlObject('import Haser 1.0; Hash {}', parentItem, 'MyDynamicHashObject'); // Note the last arg above is only for tracing if an error occure var rv = hasherObj.sha1(str); hasherObj.destroy(); return rv; } Note: In your example, the sha1 function doesn't require any property of the Has Object, you could put that static in C++. Also your Hash class could be a C++ singleton in your example. Here's a small example: replace hash by a singleton, which will be created when access in import in your *main.cpp:* #include #include #include #include "hash.h" static QJSValue mySingletonProvider(QQmlEngine *engine, QJSEngine *scriptEngine) { // TODO make this engine and script engine dependant return new Hash(); } int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); //qmlRegisterType("Hasher", 1, 0, "Hash"); qmlRegisterSingletonType("Hasher", 1, 0, "Hash", mySingletonProvider); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); } *in Hash.h:* make your function public static and Q_INVOKABLE (can remove the slot): static Q_INVOKABLE QString sha1(QString str); *in app.js:* //.pragma library .import Hasher 1.0 as Hasher function hash(str) { return Hasher.sha1(str); } You could also use it in Qml directly into a binding that way: property string myHash: Hash.sha1(MyOtherObj.myString) Hope this clarify thing a bit. Jerome On Tue, Dec 1, 2015 at 10:14 AM, Jason H <jh...@gmx.com> wrote: > Here's a sample project. TypeError on line 5 of app.js > > > *Sent:* Tuesday, December 01, 2015 at 9:25 AM > > *From:* "Jason H" <jh...@gmx.com> > *To:* "Jason H" <jh...@gmx.com> > *Cc:* "Jérôme Godbout" <jer...@bodycad.com>, interest < > interest@qt-project.org> > *Subject:* Re: [Interest] Import C++ types to Javascript > I'm still looking for help on how to use QObject slots in JS, not as > singleton. I'm still getting that parse error. > > Are there any examples of QObjects being used in JS files (NOT QML! -- > .import vs import ) > > > > *Sent:* Sunday, November 29, 2015 at 12:39 AM > *From:* "Jason H" <jh...@gmx.com> > *To:* "Jason H" <jh...@gmx.com> > *Cc:* "Jérôme Godbout" <jer...@bodycad.com>, interest < > interest@qt-project.org> > *Subject:* Re: [Interest] Import C++ types to Javascript > Also note that I'm talking about Javascript, not QML. > I'm not sure if it matters, but this is me trying to use a C++ class in a > JS file, which is then imported into QML. > > > *Sent:* Sunday, November 29, 2015 at 12:33 AM > *From:* "Jason H" <jh...@gmx.com> > *To:* "Jason H" <jh...@gmx.com> > *Cc:* "Jérôme Godbout" <jer...@bodycad.com>, interest < > interest@qt-project.org> > *Subject:* Re: [Interest] Import C++ types to Javascript > To add to that: I am currently doing: > var hash = new MyLib.Hash(); // Parse Error: TypeError: Type error > var result = hash.sha1('...') > Which should work as I understand it, without a singleton. But I get the > error above. > > Many thanks. > > *Sent:* Saturday, November 28, 2015 at 11:58 PM > *From:* "Jason H" <jh...@gmx.com> > *To:* "Jérôme Godbout" <jer...@bodycad.com> > *Cc:* interest <interest@qt-project.org> > *Subject:* Re: [Interest] Import C++ types to Javascript > Thanks I;ll give that a shot, but what about a non-singleton? I think my > code should be working now, and I doon't know why it isn't. How to I make > an instance? > > > > *Sent:* Saturday, November 28, 2015 at 7:03 PM > *From:* "Jérôme Godbout" <jer...@bodycad.com> > *To:* jh...@gmx.com > *Cc:* interest <interest@qt-project.org> > *Subject:* Re: [Interest] Import C++ types to Javascript > > For cpp you can use > http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType > > put your function with Q_INVOKABL
Re: [Interest] Import C++ types to Javascript
Wow, yes, it does, very much so!!! ... Hope this clarify thing a bit. Jerome 14 AM, Jason Hwrote: Here's a sample project. TypeError on line 5 of app.js Sent: Tuesday, December 01, 2015 at 9:25 AM From: "Jason H" To: "Jason H" Cc: "Jérôme Godbout" , interest Subject: Re: [Interest] Import C++ types to _javascript_ I'm still looking for help on how to use QObject slots in JS, not as singleton. I'm still getting that parse error. Are there any examples of QObjects being used in JS files (NOT QML! -- .import vs import ) Sent: Sunday, November 29, 2015 at 12:39 AM From: "Jason H" To: "Jason H" Cc: "Jérôme Godbout" , interest Subject: Re: [Interest] Import C++ types to _javascript_ Also note that I'm talking about _javascript_, not QML. I'm not sure if it matters, but this is me trying to use a C++ class in a JS file, which is then imported into QML. Sent: Sunday, November 29, 2015 at 12:33 AM From: "Jason H" To: "Jason H" Cc: "Jérôme Godbout" , interest Subject: Re: [Interest] Import C++ types to _javascript_ To add to that: I am currently doing: var hash = new MyLib.Hash(); // Parse Error: TypeError: Type error var result = hash.sha1('...') Which should work as I understand it, without a singleton. But I get the error above. Many thanks. Sent: Saturday, November 28, 2015 at 11:58 PM From: "Jason H" To: "Jérôme Godbout" Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ Thanks I;ll give that a shot, but what about a non-singleton? I think my code should be working now, and I doon't know why it isn't. How to I make an instance? Sent: Saturday, November 28, 2015 at 7:03 PM From: "Jérôme Godbout" To: jh...@gmx.com Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ For cpp you can use http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType put your function with Q_INVOKABLE or make it a slot. Add your class to qml module. Then you can call the singleton class function by importing your module. MysingletonClass.myQInvokablefct() On Nov 28, 2015, at 6:15 PM, jh...@gmx.com wrote: This is new territory for me. Could you tell me what i need to do for both? In this case I can make a singleton, but in the future maybe I can't. Many thanks. -Original message- Sent: Saturday, 28 November 2015 at 02:21:06 From: "Jérôme Godbout" To: "Jason H" Subject: Re: [Interest] Import C++ types to _javascript_ If your object is not a singleton you will need to create an instance to call the function on that object. I suggestion you keep your staticfunction call into a singleton. So you don't need an instance. On Nov 27, 2015, at 8:11 PM, Jason H wrote: I just checked, it is a slot. I just feel like I'm missing something. Do I need to make a instance? var instance = new MyLib.Hash() ? var hash = instance.sha1("data") Sent: Friday, November 27, 2015 at 7:50 PM From: "Jérôme Godbout" To: "Jason H" Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ Make sure your function is Q_INVOKABLE or is a slot. also take care .pragme library is not possible with _javascript_ and object from c++ access On Nov 27, 2015, at 7:43 PM, Jason H wrote: Per http://doc.qt.io/qt-5/qtqml-_javascript_-imports.html I am trying to in a JS file, import a class I made and exposed to QML via hash.h: class Hash :public QObject { Q_OBJECT ... QString sha1(QString str); } main(): qmlRegisterType("MyLib", 1, 0, "Hash"); myfile.js: .import MyLib 1.0 as MyLib function myFunc(obj) { return MyLib.Hash.sha1(JSON.stringify(obj)); } but what I get when I call it is: qml: Parse Error: TypeError: Property 'sha1' of object [object Object] is not a function What am I doing wrong? JSON.Stringify-ing the MyLib or MyLib.Hash returns {} ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest ___ Interest mailing list Interest@qt-project.org
Re: [Interest] Import C++ types to Javascript
I'm still looking for help on how to use QObject slots in JS, not as singleton. I'm still getting that parse error. Are there any examples of QObjects being used in JS files (NOT QML! -- .import vs import ) Sent: Sunday, November 29, 2015 at 12:39 AM From: "Jason H"To: "Jason H" Cc: "Jérôme Godbout" , interest Subject: Re: [Interest] Import C++ types to _javascript_ Also note that I'm talking about _javascript_, not QML. I'm not sure if it matters, but this is me trying to use a C++ class in a JS file, which is then imported into QML. Sent: Sunday, November 29, 2015 at 12:33 AM From: "Jason H" To: "Jason H" Cc: "Jérôme Godbout" , interest Subject: Re: [Interest] Import C++ types to _javascript_ To add to that: I am currently doing: var hash = new MyLib.Hash(); // Parse Error: TypeError: Type error var result = hash.sha1('...') Which should work as I understand it, without a singleton. But I get the error above. Many thanks. Sent: Saturday, November 28, 2015 at 11:58 PM From: "Jason H" To: "Jérôme Godbout" Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ Thanks I;ll give that a shot, but what about a non-singleton? I think my code should be working now, and I doon't know why it isn't. How to I make an instance? Sent: Saturday, November 28, 2015 at 7:03 PM From: "Jérôme Godbout" To: jh...@gmx.com Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ For cpp you can use http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType put your function with Q_INVOKABLE or make it a slot. Add your class to qml module. Then you can call the singleton class function by importing your module. MysingletonClass.myQInvokablefct() On Nov 28, 2015, at 6:15 PM, jh...@gmx.com wrote: This is new territory for me. Could you tell me what i need to do for both? In this case I can make a singleton, but in the future maybe I can't. Many thanks. -Original message- Sent: Saturday, 28 November 2015 at 02:21:06 From: "Jérôme Godbout" To: "Jason H" Subject: Re: [Interest] Import C++ types to _javascript_ If your object is not a singleton you will need to create an instance to call the function on that object. I suggestion you keep your staticfunction call into a singleton. So you don't need an instance. On Nov 27, 2015, at 8:11 PM, Jason H wrote: I just checked, it is a slot. I just feel like I'm missing something. Do I need to make a instance? var instance = new MyLib.Hash() ? var hash = instance.sha1("data") Sent: Friday, November 27, 2015 at 7:50 PM From: "Jérôme Godbout" To: "Jason H" Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ Make sure your function is Q_INVOKABLE or is a slot. also take care .pragme library is not possible with _javascript_ and object from c++ access On Nov 27, 2015, at 7:43 PM, Jason H wrote: Per http://doc.qt.io/qt-5/qtqml-_javascript_-imports.html I am trying to in a JS file, import a class I made and exposed to QML via hash.h: class Hash :public QObject { Q_OBJECT ... QString sha1(QString str); } main(): qmlRegisterType("MyLib", 1, 0, "Hash"); myfile.js: .import MyLib 1.0 as MyLib function myFunc(obj) { return MyLib.Hash.sha1(JSON.stringify(obj)); } but what I get when I call it is: qml: Parse Error: TypeError: Property 'sha1' of object [object Object] is not a function What am I doing wrong? JSON.Stringify-ing the MyLib or MyLib.Hash returns {} ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest
Re: [Interest] Import C++ types to Javascript
This is new territory for me. Could you tell me what i need to do for both? In this case I can make a singleton, but in the future maybe I can't. Many thanks. -Original message- Sent: Saturday, 28 November 2015 at 02:21:06 From: "Jérôme Godbout" <jer...@bodycad.com> To: "Jason H" <jh...@gmx.com> Subject: Re: [Interest] Import C++ types to Javascript If your object is not a singleton you will need to create an instance to call the function on that object. I suggestion you keep your staticfunction call into a singleton. So you don't need an instance. > On Nov 27, 2015, at 8:11 PM, Jason H <jh...@gmx.com> wrote: > > I just checked, it is a slot. I just feel like I'm missing something. Do I > need to make a instance? > var instance = new MyLib.Hash() ? > var hash = instance.sha1("data") > > >> Sent: Friday, November 27, 2015 at 7:50 PM >> From: "Jérôme Godbout" <jer...@bodycad.com> >> To: "Jason H" <jh...@gmx.com> >> Cc: interest <interest@qt-project.org> >> Subject: Re: [Interest] Import C++ types to Javascript >> >> Make sure your function is Q_INVOKABLE or is a slot. also take care .pragme >> library is not possible with javascript and object from c++ access >> >>> On Nov 27, 2015, at 7:43 PM, Jason H <jh...@gmx.com> wrote: >>> >>> Per http://doc.qt.io/qt-5/qtqml-javascript-imports.html >>> >>> I am trying to in a JS file, import a class I made and exposed to QML via >>> >>> hash.h: >>> class Hash :public QObject { >>> Q_OBJECT >>> ... >>> QString sha1(QString str); >>> } >>> >>> main(): >>> qmlRegisterType("MyLib", 1, 0, "Hash"); >>> >>> myfile.js: >>> .import MyLib 1.0 as MyLib >>> >>> function myFunc(obj) { >>> return MyLib.Hash.sha1(JSON.stringify(obj)); >>> } >>> >>> but what I get when I call it is: >>> qml: Parse Error: TypeError: Property 'sha1' of object [object Object] is >>> not a function >>> >>> What am I doing wrong? >>> JSON.Stringify-ing the MyLib or MyLib.Hash returns {} >>> >>> >>> >>> ___ >>> Interest mailing list >>> Interest@qt-project.org >>> http://lists.qt-project.org/mailman/listinfo/interest >> ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest
Re: [Interest] Import C++ types to Javascript
For cpp you can use http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType put your function with Q_INVOKABLE or make it a slot. Add your class to qml module. Then you can call the singleton class function by importing your module. MysingletonClass.myQInvokablefct() > On Nov 28, 2015, at 6:15 PM, jh...@gmx.com wrote: > > This is new territory for me. Could you tell me what i need to do for both? > In this case I can make a singleton, but in the future maybe I can't. > > Many thanks. > > -Original message- > Sent: Saturday, 28 November 2015 at 02:21:06 > From: "Jérôme Godbout" <jer...@bodycad.com> > To: "Jason H" <jh...@gmx.com> > Subject: Re: [Interest] Import C++ types to Javascript > If your object is not a singleton you will need to create an instance to call > the function on that object. I suggestion you keep your staticfunction call > into a singleton. So you don't need an instance. > >> On Nov 27, 2015, at 8:11 PM, Jason H <jh...@gmx.com> wrote: >> >> I just checked, it is a slot. I just feel like I'm missing something. Do I >> need to make a instance? >> var instance = new MyLib.Hash() ? >> var hash = instance.sha1("data") >> >> >>> Sent: Friday, November 27, 2015 at 7:50 PM >>> From: "Jérôme Godbout" <jer...@bodycad.com> >>> To: "Jason H" <jh...@gmx.com> >>> Cc: interest <interest@qt-project.org> >>> Subject: Re: [Interest] Import C++ types to Javascript >>> >>> Make sure your function is Q_INVOKABLE or is a slot. also take care .pragme >>> library is not possible with javascript and object from c++ access >>> >>>> On Nov 27, 2015, at 7:43 PM, Jason H <jh...@gmx.com> wrote: >>>> >>>> Per http://doc.qt.io/qt-5/qtqml-javascript-imports.html >>>> >>>> I am trying to in a JS file, import a class I made and exposed to QML via >>>> >>>> hash.h: >>>> class Hash :public QObject { >>>> Q_OBJECT >>>> ... >>>> QString sha1(QString str); >>>> } >>>> >>>> main(): >>>> qmlRegisterType("MyLib", 1, 0, "Hash"); >>>> >>>> myfile.js: >>>> .import MyLib 1.0 as MyLib >>>> >>>> function myFunc(obj) { >>>> return MyLib.Hash.sha1(JSON.stringify(obj)); >>>> } >>>> >>>> but what I get when I call it is: >>>> qml: Parse Error: TypeError: Property 'sha1' of object [object Object] is >>>> not a function >>>> >>>> What am I doing wrong? >>>> JSON.Stringify-ing the MyLib or MyLib.Hash returns {} >>>> >>>> >>>> >>>> ___ >>>> Interest mailing list >>>> Interest@qt-project.org >>>> http://lists.qt-project.org/mailman/listinfo/interest >>> ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest
Re: [Interest] Import C++ types to Javascript
Also note that I'm talking about _javascript_, not QML. I'm not sure if it matters, but this is me trying to use a C++ class in a JS file, which is then imported into QML. Sent: Sunday, November 29, 2015 at 12:33 AM From: "Jason H"To: "Jason H" Cc: "Jérôme Godbout" , interest Subject: Re: [Interest] Import C++ types to _javascript_ To add to that: I am currently doing: var hash = new MyLib.Hash(); // Parse Error: TypeError: Type error var result = hash.sha1('...') Which should work as I understand it, without a singleton. But I get the error above. Many thanks. Sent: Saturday, November 28, 2015 at 11:58 PM From: "Jason H" To: "Jérôme Godbout" Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ Thanks I;ll give that a shot, but what about a non-singleton? I think my code should be working now, and I doon't know why it isn't. How to I make an instance? Sent: Saturday, November 28, 2015 at 7:03 PM From: "Jérôme Godbout" To: jh...@gmx.com Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ For cpp you can use http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType put your function with Q_INVOKABLE or make it a slot. Add your class to qml module. Then you can call the singleton class function by importing your module. MysingletonClass.myQInvokablefct() On Nov 28, 2015, at 6:15 PM, jh...@gmx.com wrote: This is new territory for me. Could you tell me what i need to do for both? In this case I can make a singleton, but in the future maybe I can't. Many thanks. -Original message- Sent: Saturday, 28 November 2015 at 02:21:06 From: "Jérôme Godbout" To: "Jason H" Subject: Re: [Interest] Import C++ types to _javascript_ If your object is not a singleton you will need to create an instance to call the function on that object. I suggestion you keep your staticfunction call into a singleton. So you don't need an instance. On Nov 27, 2015, at 8:11 PM, Jason H wrote: I just checked, it is a slot. I just feel like I'm missing something. Do I need to make a instance? var instance = new MyLib.Hash() ? var hash = instance.sha1("data") Sent: Friday, November 27, 2015 at 7:50 PM From: "Jérôme Godbout" To: "Jason H" Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ Make sure your function is Q_INVOKABLE or is a slot. also take care .pragme library is not possible with _javascript_ and object from c++ access On Nov 27, 2015, at 7:43 PM, Jason H wrote: Per http://doc.qt.io/qt-5/qtqml-_javascript_-imports.html I am trying to in a JS file, import a class I made and exposed to QML via hash.h: class Hash :public QObject { Q_OBJECT ... QString sha1(QString str); } main(): qmlRegisterType("MyLib", 1, 0, "Hash"); myfile.js: .import MyLib 1.0 as MyLib function myFunc(obj) { return MyLib.Hash.sha1(JSON.stringify(obj)); } but what I get when I call it is: qml: Parse Error: TypeError: Property 'sha1' of object [object Object] is not a function What am I doing wrong? JSON.Stringify-ing the MyLib or MyLib.Hash returns {} ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest
Re: [Interest] Import C++ types to Javascript
Thanks I;ll give that a shot, but what about a non-singleton? I think my code should be working now, and I doon't know why it isn't. How to I make an instance? Sent: Saturday, November 28, 2015 at 7:03 PM From: "Jérôme Godbout"To: jh...@gmx.com Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ For cpp you can use http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType put your function with Q_INVOKABLE or make it a slot. Add your class to qml module. Then you can call the singleton class function by importing your module. MysingletonClass.myQInvokablefct() On Nov 28, 2015, at 6:15 PM, jh...@gmx.com wrote: This is new territory for me. Could you tell me what i need to do for both? In this case I can make a singleton, but in the future maybe I can't. Many thanks. -Original message- Sent: Saturday, 28 November 2015 at 02:21:06 From: "Jérôme Godbout" To: "Jason H" Subject: Re: [Interest] Import C++ types to _javascript_ If your object is not a singleton you will need to create an instance to call the function on that object. I suggestion you keep your staticfunction call into a singleton. So you don't need an instance. On Nov 27, 2015, at 8:11 PM, Jason H wrote: I just checked, it is a slot. I just feel like I'm missing something. Do I need to make a instance? var instance = new MyLib.Hash() ? var hash = instance.sha1("data") Sent: Friday, November 27, 2015 at 7:50 PM From: "Jérôme Godbout" To: "Jason H" Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ Make sure your function is Q_INVOKABLE or is a slot. also take care .pragme library is not possible with _javascript_ and object from c++ access On Nov 27, 2015, at 7:43 PM, Jason H wrote: Per http://doc.qt.io/qt-5/qtqml-_javascript_-imports.html I am trying to in a JS file, import a class I made and exposed to QML via hash.h: class Hash :public QObject { Q_OBJECT ... QString sha1(QString str); } main(): qmlRegisterType("MyLib", 1, 0, "Hash"); myfile.js: .import MyLib 1.0 as MyLib function myFunc(obj) { return MyLib.Hash.sha1(JSON.stringify(obj)); } but what I get when I call it is: qml: Parse Error: TypeError: Property 'sha1' of object [object Object] is not a function What am I doing wrong? JSON.Stringify-ing the MyLib or MyLib.Hash returns {} ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest
Re: [Interest] Import C++ types to Javascript
To add to that: I am currently doing: var hash = new MyLib.Hash(); // Parse Error: TypeError: Type error var result = hash.sha1('...') Which should work as I understand it, without a singleton. But I get the error above. Many thanks. Sent: Saturday, November 28, 2015 at 11:58 PM From: "Jason H"To: "Jérôme Godbout" Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ Thanks I;ll give that a shot, but what about a non-singleton? I think my code should be working now, and I doon't know why it isn't. How to I make an instance? Sent: Saturday, November 28, 2015 at 7:03 PM From: "Jérôme Godbout" To: jh...@gmx.com Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ For cpp you can use http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType put your function with Q_INVOKABLE or make it a slot. Add your class to qml module. Then you can call the singleton class function by importing your module. MysingletonClass.myQInvokablefct() On Nov 28, 2015, at 6:15 PM, jh...@gmx.com wrote: This is new territory for me. Could you tell me what i need to do for both? In this case I can make a singleton, but in the future maybe I can't. Many thanks. -Original message- Sent: Saturday, 28 November 2015 at 02:21:06 From: "Jérôme Godbout" To: "Jason H" Subject: Re: [Interest] Import C++ types to _javascript_ If your object is not a singleton you will need to create an instance to call the function on that object. I suggestion you keep your staticfunction call into a singleton. So you don't need an instance. On Nov 27, 2015, at 8:11 PM, Jason H wrote: I just checked, it is a slot. I just feel like I'm missing something. Do I need to make a instance? var instance = new MyLib.Hash() ? var hash = instance.sha1("data") Sent: Friday, November 27, 2015 at 7:50 PM From: "Jérôme Godbout" To: "Jason H" Cc: interest Subject: Re: [Interest] Import C++ types to _javascript_ Make sure your function is Q_INVOKABLE or is a slot. also take care .pragme library is not possible with _javascript_ and object from c++ access On Nov 27, 2015, at 7:43 PM, Jason H wrote: Per http://doc.qt.io/qt-5/qtqml-_javascript_-imports.html I am trying to in a JS file, import a class I made and exposed to QML via hash.h: class Hash :public QObject { Q_OBJECT ... QString sha1(QString str); } main(): qmlRegisterType("MyLib", 1, 0, "Hash"); myfile.js: .import MyLib 1.0 as MyLib function myFunc(obj) { return MyLib.Hash.sha1(JSON.stringify(obj)); } but what I get when I call it is: qml: Parse Error: TypeError: Property 'sha1' of object [object Object] is not a function What am I doing wrong? JSON.Stringify-ing the MyLib or MyLib.Hash returns {} ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest
Re: [Interest] Import C++ types to Javascript
I just checked, it is a slot. I just feel like I'm missing something. Do I need to make a instance? var instance = new MyLib.Hash() ? var hash = instance.sha1("data") > Sent: Friday, November 27, 2015 at 7:50 PM > From: "Jérôme Godbout" <jer...@bodycad.com> > To: "Jason H" <jh...@gmx.com> > Cc: interest <interest@qt-project.org> > Subject: Re: [Interest] Import C++ types to Javascript > > Make sure your function is Q_INVOKABLE or is a slot. also take care .pragme > library is not possible with javascript and object from c++ access > > > On Nov 27, 2015, at 7:43 PM, Jason H <jh...@gmx.com> wrote: > > > > Per http://doc.qt.io/qt-5/qtqml-javascript-imports.html > > > > I am trying to in a JS file, import a class I made and exposed to QML via > > > > hash.h: > > class Hash :public QObject { > > Q_OBJECT > > ... > > QString sha1(QString str); > > } > > > > main(): > > qmlRegisterType("MyLib", 1, 0, "Hash"); > > > > myfile.js: > > .import MyLib 1.0 as MyLib > > > > function myFunc(obj) { > >return MyLib.Hash.sha1(JSON.stringify(obj)); > > } > > > > but what I get when I call it is: > > qml: Parse Error: TypeError: Property 'sha1' of object [object Object] is > > not a function > > > > What am I doing wrong? > > JSON.Stringify-ing the MyLib or MyLib.Hash returns {} > > > > > > > > ___ > > Interest mailing list > > Interest@qt-project.org > > http://lists.qt-project.org/mailman/listinfo/interest > ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest
Re: [Interest] Import C++ types to Javascript
If your object is not a singleton you will need to create an instance to call the function on that object. I suggestion you keep your staticfunction call into a singleton. So you don't need an instance. > On Nov 27, 2015, at 8:11 PM, Jason H <jh...@gmx.com> wrote: > > I just checked, it is a slot. I just feel like I'm missing something. Do I > need to make a instance? > var instance = new MyLib.Hash() ? > var hash = instance.sha1("data") > > >> Sent: Friday, November 27, 2015 at 7:50 PM >> From: "Jérôme Godbout" <jer...@bodycad.com> >> To: "Jason H" <jh...@gmx.com> >> Cc: interest <interest@qt-project.org> >> Subject: Re: [Interest] Import C++ types to Javascript >> >> Make sure your function is Q_INVOKABLE or is a slot. also take care .pragme >> library is not possible with javascript and object from c++ access >> >>> On Nov 27, 2015, at 7:43 PM, Jason H <jh...@gmx.com> wrote: >>> >>> Per http://doc.qt.io/qt-5/qtqml-javascript-imports.html >>> >>> I am trying to in a JS file, import a class I made and exposed to QML via >>> >>> hash.h: >>> class Hash :public QObject { >>> Q_OBJECT >>> ... >>> QString sha1(QString str); >>> } >>> >>> main(): >>> qmlRegisterType("MyLib", 1, 0, "Hash"); >>> >>> myfile.js: >>> .import MyLib 1.0 as MyLib >>> >>> function myFunc(obj) { >>> return MyLib.Hash.sha1(JSON.stringify(obj)); >>> } >>> >>> but what I get when I call it is: >>> qml: Parse Error: TypeError: Property 'sha1' of object [object Object] is >>> not a function >>> >>> What am I doing wrong? >>> JSON.Stringify-ing the MyLib or MyLib.Hash returns {} >>> >>> >>> >>> ___ >>> Interest mailing list >>> Interest@qt-project.org >>> http://lists.qt-project.org/mailman/listinfo/interest >> ___ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest