在C中,我有一个具有调用函数的类,我想做的是从QML /
Javascript调用该方法(我已经工作了),并传递一个Javascript回调.
在代码中,我定义了我的类:
class MyObject: public QObject { Q_OBJECT public: Q_INVOKABLE void doSomething(quint64 x,/* what goes here? */ jsCallback) { x += 1; // I suspect this will require a invocation mechanism but // this shows what I'd like to do jsCallback(x); } };
在我的QML中,我想做一些像
Rectangle { function myCallback(x){ console.log("x=" + x); } MouseArea{ anchors.fill: parent onClicked:{ myObject.doSomething(2,myCallback); } } }
所以当我点击Rectangle时,我会在控制台中看到x = 3.我如何在C中定义参数并调用回调才能完成此操作?
谢谢!
解决方法
我想我已经弄清楚了.我最终做的是在我的C类中实现这样的:
class MyObject: public QObject { Q_OBJECT public: Q_INVOKABLE void doSomething(quint64 x,QJSValue jsCallback) { x += 1; QJSValue val = jsCallback.engine()->newObject(); val.setProperty("x",x); jsCallback.call(QJSValueList { val }); } };
然后我可以访问我的回调中的值,如:
function myCallback(x){ console.log("x=" + x.x); }