gpt4 book ai didi

javascript - 如何在 QWebView 中获取 Javascript 以创建基于 C++ 的类的新实例?

转载 作者:数据小太阳 更新时间:2023-10-29 05:13:58 25 4
gpt4 key购买 nike

我已经使用 addToJavaScriptWindowObject 成功地将 C++ 对象添加到 QWebFrame ,并且可以从 javascript 调用该对象上的插槽。

但我真正想做的是让其中一个插槽返回一个新对象。例如,我有一个这样的插槽,它返回一个 QObject 派生类实例:

   MyObject* MyApp::helloWorld()
{
//MyObject is dervied from QObject
return new MyObject();
}

我可以像这样从javascript成功调用这个槽

   var foo=myapp.helloWorld();

但是 foo 似乎是空的,我不能调用任何插槽或访问任何来自 Javascript 的属性。

关于如何实现这一点有什么想法吗?

最佳答案

我考虑过的一个相当丑陋的 hack 是使用 addToJavaScriptWindowObject 将我想要返回的对象放入具有随机名称的窗口对象中,然后让我的插槽返回对象实例的名称:

QString MyApp::helloWorld()
{
//general a unique name for the js variable
QString name=getRandomVariableName();

//here's the object we want to expose to js
MyObject* pReturn=new MyObject();

//we make attach our object to the js window object
getWebFrame()->addToJavaScriptWindowObject(name, pReturn,
QScriptEngine::ScriptOwnership);

//tell js the name we used
return name;
}

可以写JS判断返回值是否为字符串,如果是则从窗口中抓取对象:

var foo=myapp.helloWorld();
if (typeof foo == "string")
{
foo=window[foo];
}

有点难看,但在出现更好的方法之前会帮我解决这个问题。 future 的 Qt 版本将统一脚本支持,使其全部基于 WebKit 中的 JavaScriptCore,因此希望这会有所改进!

关于javascript - 如何在 QWebView 中获取 Javascript 以创建基于 C++ 的类的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/943554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com