0

我正在尝试调用在 C++ 中实现的函数来调用 JS 函数,该函数使用 QT QJSEngine 进行评估。

到目前为止,我已经尝试过了

class Person : public QObject {

Q_OBJECT

public:
    Q_INVOKABLE cppFunction(int a);
    
};

我的功能评估看起来像这样

QJSValue formulaFunction = jsEngine->evaluate("(function(" + functionArgList.join(",") + "){ " + formula + "})");

在公式中,我调用了 cppFunction 并且 functionArgList 提供了参数,这些工作正常,我已经检查过了。所以,但不知何故它没有被调用,我也没有收到错误。我错过了什么还是应该以这种方式工作?

4

1 回答 1

0

所以,经过一些研究,我让它运行起来。

class MyObject : public QObject{

   Q_OBJECT

public:
    Q_INVOKABLE MyObject() {}
    Q_INVOKABLE bool hasChannel(int id);
};

QJSEngine engine;
    QJSValue injectedObject;
    injectedObject= engine.newQMetaObject(&MyObject::staticMetaObject);
    engine.globalObject().setProperty("MyObject", injectedObject);

所以,我在这里创建了一个继承自 QObject 的新类。该类有两个方法,我想在 QJSEngine 中调用的每个方法都必须在方法声明前提供 Q_INVOKABLE 标签。

引擎运行的示例 JS 代码如下所示

let myObject = new MyObject();
myObject.hasChannel(1234);

我不知道注入的前缀是否合适,但我想不出更好的前缀

于 2021-08-04T14:50:07.327 回答