[Interest] Adding existing QObjects to QJSEngine

Boudewijn Rempt boud at valdyas.org
Thu Apr 21 12:29:05 CEST 2016

I want to make Krita scriptable, maybe with QJSengine. I'm trying to give
the js engine access to the existing objects in Krita: the images, documents,
windows etc.

>From the documentation, I though I would have to use QJSEngine.newQObject, but
that takes ownership and deletes the objects as soon as the engine goes out
of scope.

I thought it would work like the way one can register existing objects with

Here is what I'm trying to do:

     QString script = m_scriptEditor->ui->txtScript->document()->toPlainText();
     if (script.isEmpty()) return;

     QJSEngine engine;

     if (m_canvas) {
         QJSValue canvas = engine.newQObject(dynamic_cast<KisCanvas2*>(m_canvas));
         engine.globalObject().setProperty("currentCanvas", canvas);

     QJSValue part = engine.newQObject(KisPart::instance());
     engine.globalObject().setProperty("KisPart", part);

     QString output = engine.evaluate(script).toString();

Boudewijn Rempt | http://www.krita.org, http://www.valdyas.org

More information about the Interest mailing list