在堆上访问由QScriptEngine创建的值?

时间:2014-12-18 08:38:18

标签: c++ qt qtscript

[问题]

假设我们使用以下脚本提供QScriptEngine

var foo = 1;
var bar = 2;
foo + bar

QScriptEngine::evaluate(),我们会返回QScriptValue,可以将其转换回int等于3。

另一方面,如果我们使用脚本提供QScriptEngine

var foo = 1;
var bar = 2;

那么我们如何才能访问堆上脚本创建的foobar的值?

[实施例]

enter image description here

以MATLAB(Python IDLE是相同的)为例。我可以读取脚本文件,脚本创建的变量仍可用于命令提示符。

我正在考虑在Qt中做同样的事情:

  1. 将脚本文件读取到QString
  2. 致电QScriptEngine::evaluate()以评估QString
  3. 但我无法弄清楚如何获取脚本创建的var

    P.S。脚本可能非常复杂,不仅仅是竞争变量,我只是试着让问题更简单。

1 个答案:

答案 0 :(得分:2)

如果变量是全局变量,则可以在global object(通过globalObject()方法)中访问它们。来自文档:

  

...脚本代码中的非局部变量将被创建为全局对象的属性,以及全局代码中的局部变量。

简而言之,您必须获取全局对象,然后通过其属性iterate使用property()方法读取其值(请注意,您只需要脚本中的变量):

QScriptValueIterator it(engine.globalObject());
 while (it.hasNext()) {
     it.next();
     qDebug() << it.name() << ": " << it.value().toString();
 }