Qt:在导入的 Javascript 资源中导入 Qml 模块
Qt: Import Qml Module in imported Javascript resource
我喜欢从导入的 js 资源(qml -> .js -> 模块)中访问已注册的 QObject。
从 QML 访问有效,但使用“.import”,如 in the docs from within the js file does not. Some related issues raise the impression it may work () or not.
所述
这通常是可行的吗?如何实现的?仅对某些模块可行,还是根本不可能?
带有控制台输出注释输出的代码:
main.cpp
[...]
qmlRegisterSingletonInstance<MyModule>("org.example.MyModule", 1, 0, "MyModule", (new MyModule()));
[...]
MyModule.hpp
#pragma once
#include <QObject>
class MyModule : public QObject
{
Q_OBJECT
public:
enum SOMETHING { AAA, BBB, CCC, DDD, EEE, FFF };
Q_ENUM(SOMETHING)
};
main.qml
import org.example.MyModule 1.0
import "qrc:/something.js" as Something
[...]
console.log(MyModule, MyModule.DDD)// prints something like: "MyModule(0x....) 3"
[...]
Something.doit()
[...]
something.js
.import org.example.MyModule 1.0 as MyModule
[...]
console.log(MyModule, MyModule.DDD) // prints something like: "[object Object] undefined"
[...]
得到支持人员的答复:显然,您需要在模块前面加上导入命名空间,即 MyModule.MyModule.DDD
而不是 MyModule.DDD
:
.import org.example.MyModule 1.0 as MyModule
[...]
console.log(MyModule.MyModule, MyModule.MyModule.DDD)
[...]
我喜欢从导入的 js 资源(qml -> .js -> 模块)中访问已注册的 QObject。
从 QML 访问有效,但使用“.import”,如 in the docs from within the js file does not. Some related issues raise the impression it may work (
这通常是可行的吗?如何实现的?仅对某些模块可行,还是根本不可能?
带有控制台输出注释输出的代码:
main.cpp
[...]
qmlRegisterSingletonInstance<MyModule>("org.example.MyModule", 1, 0, "MyModule", (new MyModule()));
[...]
MyModule.hpp
#pragma once
#include <QObject>
class MyModule : public QObject
{
Q_OBJECT
public:
enum SOMETHING { AAA, BBB, CCC, DDD, EEE, FFF };
Q_ENUM(SOMETHING)
};
main.qml
import org.example.MyModule 1.0
import "qrc:/something.js" as Something
[...]
console.log(MyModule, MyModule.DDD)// prints something like: "MyModule(0x....) 3"
[...]
Something.doit()
[...]
something.js
.import org.example.MyModule 1.0 as MyModule
[...]
console.log(MyModule, MyModule.DDD) // prints something like: "[object Object] undefined"
[...]
得到支持人员的答复:显然,您需要在模块前面加上导入命名空间,即 MyModule.MyModule.DDD
而不是 MyModule.DDD
:
.import org.example.MyModule 1.0 as MyModule
[...]
console.log(MyModule.MyModule, MyModule.MyModule.DDD)
[...]