将Javascript回调传递给Qml中的C++ Invoked方法

Add*_*ddy 11 javascript qt qml qtquick2

在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);
    }
};
Run Code Online (Sandbox Code Playgroud)

在我的QML中,我想做的事情如下:

Rectangle {

    function myCallback(x){
        console.log("x=" + x);
    }

    MouseArea{
        anchors.fill: parent
        onClicked:{
            myObject.doSomething(2, myCallback);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以当我点击时Rectangle,我会x=3在控制台中看到.如何在C++中定义参数并调用回调以实现此目的?

谢谢!

Add*_*ddy 14

我想我已经弄明白了.我最终做的是在我的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 });
    }
};
Run Code Online (Sandbox Code Playgroud)

然后我可以在我的回调中访问值,如:

function myCallback(x){
    console.log("x=" + x.x);
}
Run Code Online (Sandbox Code Playgroud)