将 Javascript 回调传递给 Qml 中的 C++ 调用方法
Passing a Javascript callback to a C++ Invoked method in Qml
在 C++ 中,我有一个带有可调用函数的 class,我想做的是从 QML/Javascript 调用该方法(我已经开始工作了)并将它传递给 Javascript回调。
在代码中,我将 class 定义为:
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 中实现它,如下所示:
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);
}
在 C++ 中,我有一个带有可调用函数的 class,我想做的是从 QML/Javascript 调用该方法(我已经开始工作了)并将它传递给 Javascript回调。
在代码中,我将 class 定义为:
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 中实现它,如下所示:
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);
}