- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在Qt 4.8 的脚本引擎中,“本地”变量可以通过obtaining a QScriptContext
from QScriptEngine::pushContext
then setting the properties of its activation object 来设置。 .这只能在 push/pop 调用中完成,因为那是唯一一个 QScriptContext
的地方。可用并且 AFAICT 没有 QScriptEngine#evaluate
的等价物这需要 QScriptContext
用作环境:
QScriptEngine engine;
QScriptContext *local;
local = engine.pushContext();
local->activationObject().setProperty("value", 2); // set value=2
qDebug() << engine.evaluate("value").toNumber(); // outputs 2
engine.popContext();
是否有某种方法可以维护一个环境,以便在 推/弹出调用之外进行评估?例如,我尝试创建一个 QScriptValue
用作激活对象,然后设置它:
QScriptEngine engine;
QScriptContext *local;
// Use ao as activation object, set variables here, prior to pushContext.
QScriptValue ao;
ao.setProperty("value", 1);
// Test with ao:
local = engine.pushContext();
local->setActivationObject(ao);
qDebug() << engine.evaluate("value").toNumber();
engine.popContext();
但这行不通。它输出 nan
而不是 1
, 作为 value
未定义。由于某种原因setActivationObject
没有改变值(value)。
我的总体目标是:
pushContext
之间评估脚本时使用该预配置的本地环境和 popContext
调用,而不必每次都重新设置该环境中的所有变量。所以:
ao
不当?例如,有一个未记录的 QScriptEngine#newActivationObject()
使用时会产生“未实现”错误,也许这是一个提示?我如何设置本地上下文,但基本上不必在每次推送上下文时都重新配置它(因为每次弹出上下文时它基本上都永远丢失了)。
最佳答案
您可以使用全局对象。它将在所有评估中共享属性值:
#include <QCoreApplication>
#include <QDebug>
#include <QtScript/QScriptEngine>
#include <QtScript/QScriptContext>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QScriptEngine engine;
engine.globalObject().setProperty("value", 2);
engine.globalObject().setProperty("value2", 3);
qDebug() << engine.evaluate("value").toNumber(); // outputs 2
qDebug() << engine.evaluate("value2").toNumber(); // outputs 3
return a.exec();
}
或者如果你不想要全局范围:
#include <QCoreApplication>
#include <QDebug>
#include <QtScript/QScriptEngine>
#include <QtScript/QScriptContext>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QScriptEngine engine;
QScriptContext *context;
QScriptValue scope = engine.newObject();
scope.setProperty("value", 1);
scope.setProperty("value2", 2);
context = engine.pushContext();
context->pushScope(scope);
qDebug() << engine.evaluate("value").toNumber(); // outputs 1
qDebug() << engine.evaluate("value2").toNumber(); // outputs 2
engine.popContext();
return a.exec();
}
关于c++ - 有没有办法在 QScriptEngine#pushContext/popContext 之外维护 Qt 脚本上下文环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39128858/
在Qt 4.8 的脚本引擎中,“本地”变量可以通过obtaining a QScriptContext from QScriptEngine::pushContext then setting the
我是一名优秀的程序员,十分优秀!