0

[问题]

假设我们QScriptEngine使用以下脚本进行输入:

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

通过QScriptEngine::evaluate(),我们将得到一个QScriptValue返回值,它可以转换回int等于 3。

另一方面,如果我们QScriptEngine输入脚本:

var foo = 1;
var bar = 2;

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

[例子]

在此处输入图像描述

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

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

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

但我不知道如何获得var由脚本创建的那些。

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

4

1 回答 1

2

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

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

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

QScriptValueIterator it(engine.globalObject());
 while (it.hasNext()) {
     it.next();
     qDebug() << it.name() << ": " << it.value().toString();
 }
于 2014-12-18T08:59:42.970 回答