Passing a Javascript callback to a C++ Invoked method in Qml(将 Javascript 回调传递给 Qml 中的 C++ 调用方法)
问题描述
在 C++ 中,我有一个带有可调用函数的类,我想做的是从 QML/Javascript 调用该方法(我已经开始工作了)并将其传递给 Javascript 回调.
In C++ I have a class with an invokable function, what I would like to do is call that method from QML/Javascript (this I've gotten to work) and pass it a Javascript callback.
在代码中,我将我的类定义为:
In code, I define my class like:
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 中,我想做类似的事情:
And in my QML, I would like to do something like:
Rectangle {
function myCallback(x){
console.log("x=" + x);
}
MouseArea{
anchors.fill: parent
onClicked:{
myObject.doSomething(2, myCallback);
}
}
}
所以当我点击 Rectangle
时,我会在控制台中看到 x=3
.我将如何在 C++ 中定义参数并调用回调以完成此操作?
So that when I click on the Rectangle
, I would see x=3
in the console. How would I define the parameter in C++ and invoke the callback in order to accomplish this?
谢谢!
推荐答案
我想我已经想通了.我最终做的是在我的 C++ 类中实现它,如下所示:
I think I've figured this out. What I ended up doing was implementing this in my C++ class like such:
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 });
}
};
然后我可以访问回调中的值,例如:
And then I can access the value in my callback like:
function myCallback(x){
console.log("x=" + x.x);
}
这篇关于将 Javascript 回调传递给 Qml 中的 C++ 调用方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将 Javascript 回调传递给 Qml 中的 C++ 调用方法
- 失败的 Canvas 360 jquery 插件 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- Flexslider 箭头未正确显示 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Fetch API 如何获取响应体? 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01