Один довольно уродливый хак, который я рассмотрел, - это использование 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];
}
Немного безобразно, но заставлю меня обойтись, пока не появится лучший метод. В будущих версиях Qt будет объединена поддержка сценариев, так что все они будут основаны на JavaScriptCore в WebKit, так что, надеюсь, это улучшится!