Qt 5.0:将C++方法暴露给Java Script

Max*_*xym 6 javascript qt qt5

我试图将一个对象作为全局属性公开给Java Script,其中包含以下方法:

Q_INVOKABLE MyObject* createMyObject();
Run Code Online (Sandbox Code Playgroud)

MyObject派生自QObject.

当我在Java Script中调用此方法时,它返回一个类型为的对象:

QVariant(MyObject*)
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以自动将其转换为QJSValue,以便我可以在脚本中进一步使用它?

Max*_*xym 3

需要做的就是在脚本中引用MyObject之前调用下面的方法。

qmlRegisterType<MyObject>("", 1, 0, "MyObject");
Run Code Online (Sandbox Code Playgroud)

然后createMyObject方法将返回正确的类型,无需任何转换:

var obj = createMyObject();

MyObject
Run Code Online (Sandbox Code Playgroud)

实际上如果我们改变下面方法的类型

Q_INVOKABLE MyObject* createMyObject();
Run Code Online (Sandbox Code Playgroud)

Q_INVOKABLE QObject* createMyObject();
Run Code Online (Sandbox Code Playgroud)

即使没有它也会开始工作

qmlRegisterType
Run Code Online (Sandbox Code Playgroud)