假设我们使用以下脚本提供QScriptEngine
:
var foo = 1;
var bar = 2;
foo + bar
QScriptEngine::evaluate()
,我们会返回QScriptValue
,可以将其转换回int
等于3。
另一方面,如果我们使用脚本提供QScriptEngine
:
var foo = 1;
var bar = 2;
那么我们如何才能访问堆上脚本创建的foo
和bar
的值?
以MATLAB(Python IDLE是相同的)为例。我可以读取脚本文件,脚本创建的变量仍可用于命令提示符。
我正在考虑在Qt中做同样的事情:
QString
QScriptEngine::evaluate()
以评估QString
但我无法弄清楚如何获取脚本创建的var
。
P.S。脚本可能非常复杂,不仅仅是竞争变量,我只是试着让问题更简单。
答案 0 :(得分:2)
如果变量是全局变量,则可以在global object(通过globalObject()
方法)中访问它们。来自文档:
...脚本代码中的非局部变量将被创建为全局对象的属性,以及全局代码中的局部变量。
简而言之,您必须获取全局对象,然后通过其属性iterate使用property()方法读取其值(请注意,您只需要脚本中的变量):
QScriptValueIterator it(engine.globalObject());
while (it.hasNext()) {
it.next();
qDebug() << it.name() << ": " << it.value().toString();
}