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

前端之家收集整理的这篇文章主要介绍了将Javascript回调传递给Qml中的C调用方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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);
}
原文链接:https://www.f2er.com/js/152972.html

猜你在找的JavaScript相关文章