[Interest] Creating C++ objects in JavaScript with operator new
Richard Weickelt
richard at weickelt.de
Mon Apr 15 22:10:04 CEST 2019
Hi,
is there an easy way to register a QObject-derived class in the QML type
system so that I can instantiate it from within JavaScript code using
operator new?
function someJavaScriptFunction(){
var myObject = new MyClass("blabla");
// ...
}
Right now I am registering another class as a proxy which then registers the
constructor function for my class. This looks overly verbose and clunky. Is
there a simpler way?
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject* parent = nullptr, const QString& someParam = "");
Q_INVOKABLE bool someMethod() const;
static void registerAsJSType(QJSEngine* engine);
};
class MyClassCreator : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE MyClass* createObject(const QVariantMap& arguments);
};
void MyClass::registerAsJSType(QJSEngine* engine)
{
QJSValue creator = engine->newQObject(new MyClassCreator());
engine->globalObject().setProperty("_MyClassCreator", creator);
engine->evaluate("function MyClass(param) { return
_MyClassCreator.createObject({ someParam: param }); }");
}
MyClass* MyClassCreator::createObject(const QVariantMap& arguments)
{
QString someParam = arguments.value("someParam").toString();
return new MyClass(qmlEngine(this), someParam);
}
Thanks
Richard
More information about the Interest
mailing list