[Interest] QJSengine access QObject children
Eric Lemanisser
eric.lemanissier at gmail.com
Thu Oct 11 12:15:01 CEST 2018
Hello,
I'm starting to use QJSEngine in order to make a full QObject hierarchy
scriptable. Calling QJSEngine::newQObject gives access to signals, slots
and properties of the object from the javascript side, but I could not find
the QObject's children in any properties, contrary to what is described in
the documentation http://doc.qt.io/qt-5/qjsengine.html#newQObject :
"Signals and slots, properties *and children* of object are available as
properties of the created QJSValue.". Did I miss something ?
As a workaround I ended up developing the following Q_INVOKABLE member,
which properly returns an array of objects with properties when invoked
from JS side:
QJSValue ScriptWindow::findChildren(const QJSValue &v)
{
const auto engine = qjsEngine(this);
const auto o = v.toQObject();
if(!o || !engine) return {};
const auto children = o->findChildren<QObject *>();
auto res = engine->newArray(children.size());
for(int i = 0; i < children.size(); i++)
{
res.setProperty(i, engine->newQObject(children.at(i)));
}
return res;
}
Shouldn't this boilerplate be integrated in Qt, with the handling of
QObject::findChildren parameters (QString aName and Qt::FindChildOptions) ?
dito for QObject::findChild
Eric Lemanissier
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20181011/d924bc3c/attachment.html>
More information about the Interest
mailing list