Передача обратного вызова Javascript на метод С++ Invoked в Qml
В С++ у меня есть класс с invokable функцией, то, что я хотел бы сделать, это вызвать этот метод из 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
в консоли. Как я могу определить параметр в С++ и вызвать обратный вызов, чтобы выполнить это?
Спасибо!
Ответы
Ответ 1
Думаю, я понял это. То, что я закончил, это реализовать это в моем классе С++, например:
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);
}