qt - QtScript: how to reload current script? -


qscriptengine has evaluate() method can used load script, execute , run specified function loaded script. how clear current script , load new one? example, use evaluate() load script file , evaluate() script functions , call them. can clear current script , load new 1 different file? deleting , creating qscriptengine seems solution, likes created in gui thread (due qscriptenginedebugger) while script operations performed in separate thread. way clear current script without re-creating qscriptengine object?

i ran problem, , improve eye of hell's answer (thanks, way!), leaves out important detail.

i'll use cut down version of problem, reusing qscriptengine object , wanted ensure nothing left behind between evaluations. in particular, wanted ensure onequipped function not called "rc helicopter controller" entity, doesn't change sprite when equipped , hence doesn't define onequipped function in script file. using pushcontext() , popcontext() results in nothing being called @ all:

#include <qtcore> #include <qtscript>  int main(int argc, char *argv[]) {     qcoreapplication app(argc, argv);      qscriptengine scriptengine;      scriptengine.pushcontext();     scriptengine.evaluate("function onequipped(entity) { print('changing pixmap equipped sprite ' + entity); }").tostring();     qscriptvaluelist args;     args << qscriptvalue("pistol");     scriptengine.globalobject().property("onequipped").call(qscriptvalue(), args);     scriptengine.popcontext();      scriptengine.pushcontext();     args.clear();     args << qscriptvalue("rc helicopter controller");     scriptengine.globalobject().property("onequipped").call(qscriptvalue(), args);     scriptengine.popcontext();      return 0; } 

the function call seems happen on original context, not current one. upon looking @ qscriptengine::pushcontext() documentation, saw need explicitly use context returned it, , on top of that, must use qscriptengine::activationcontext() access variables:

#include <qtcore> #include <qtscript>  int main(int argc, char *argv[]) {     qcoreapplication app(argc, argv);      qscriptengine scriptengine;      scriptengine.pushcontext();     scriptengine.evaluate("function onequipped(entity) { print('changing pixmap equipped sprite ' + entity); }").tostring();     qscriptvaluelist args;     args << qscriptvalue("pistol");     scriptengine.currentcontext()->activationobject().property("onequipped").call(qscriptvalue(), args);     scriptengine.popcontext();      scriptengine.pushcontext();     args.clear();     args << qscriptvalue("rc helicopter controller");     scriptengine.currentcontext()->activationobject().property("onequipped").call(qscriptvalue(), args);     scriptengine.popcontext();      return 0; } 

changing pixmap equipped sprite pistol


Comments

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -