gpt4 book ai didi

c++ - 访问 QScriptEngine 在堆上创建的值?

转载 作者:行者123 更新时间:2023-11-28 02:35:45 27 4
gpt4 key购买 nike

[问题]

假设我们喂 QScriptEngine使用以下脚本:

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

来自QScriptEngine::evaluate() ,我们会得到一个 QScriptValue返回值可以转换回等于 3 的 int

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

var foo = 1;
var bar = 2;

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

[例子]

enter image description here

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

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

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

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

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

最佳答案

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

...Non-local variables in script code will be created as properties of the Global Object, as well as local variables in global code.

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

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

关于c++ - 访问 QScriptEngine 在堆上创建的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27542268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com