我正在尝试调用在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提供的参数,这些工作很好,我已经检查了它们。但不知何故它没有被调用,我也没有得到错误。是我遗漏了什么,还是应该这样?
所以,经过一番研究,我让它运行起来了。
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);
我不知道注入的前缀是否合适,但我想不出一个更好的