[题]

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

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


通过QScriptEngine::evaluate(),我们将返回一个QScriptValue,可以将其转换回等于3的int

另一方面,如果我们向QScriptEngine提供脚本:

var foo = 1;
var bar = 2;


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

[例]



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

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


将脚本文件读取到QString
调用QScriptEngine::evaluate()评估QString


但是我不知道如何获得脚本创建的var

附言该脚本可能非常复杂,而不仅仅是竞争变量,我只是想使问题更简单。

最佳答案

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


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


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

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

09-11 20:20