【问题标题】:Qt: Import Qml Module in imported Javascript resourceQt:在导入的 Javascript 资源中导入 Qml 模块
【发布时间】:2021-09-23 11:38:37
【问题描述】:

我喜欢从导入的 js 资源(qml -> .js -> 模块)中访问已注册的 QObject。 从 QML 访问有效,但在 js 文件中使用 in the docs 解释的“.import”无效。一些相关问题给人的印象可能是work (another) 或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"
[...]

【问题讨论】:

  • 你为什么使用qmlRegisterSingletonInstance?你的 cpp 类不是单例的。
  • 这是什么意思Import Qml Module in Javascript file你的标题是错误的。你从 qml 中的 c++ 导入一个类。
  • @Parisa.H.R 实际的实现是,重要的是它永远不会被实例化两次。
  • @Parisa.H.R 编辑了标题,我尝试从在 qml (qml->js->module) 中导入的 js 文件中导入模块 (c++ QObject)。在qml文件中导入本身就可以正常工作,但是在导入的js文件中就不行了。

标签: javascript c++ qt qml


【解决方案1】:

得到支持的回答:显然,您需要在模块前面加上导入命名空间,即MyModule.MyModule.DDD 而不是MyModule.DDD

.import org.example.MyModule 1.0 as MyModule
[...]
console.log(MyModule.MyModule, MyModule.MyModule.DDD)
[...]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多