Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

225
Views
No se puede importar un módulo JS con tipos desconocidos a QJSEngine

Creo una clase de extensión para QJSEngine que proporciona una función importModule() al objeto global del motor que funciona como una declaración de import estándar en JS.

La versión simplificada de esta clase se encuentra a continuación.

 class ModuleImportExtension : public QObject { Q_OBJECT public: ModuleImportExtension(QJSEngine* engine) : QObject(), m_engine(engine) {} protected: Q_INVOKABLE void import(const QString& relativePath, const QString& jsIdentifier) { auto moduleJsVal = m_engine->importModule(QDir::current().absoluteFilePath(relativePath)); m_engine->globalObject().setProperty(jsIdentifier, moduleJsVal); Q_ASSERT(m_engine->globalObject().hasProperty(jsIdentifier)); } private: QJSEngine* m_engine; };

Para usarlo, debe crear un QJSValue desde la instancia de ModuleImportExtension y establecer su propiedad de importación en el objeto global del motor.

 // ... QJSEngine engine; auto extObj = engine.newQObject(new ModuleImportExtension(&engine)); engine.globalObject().setProperty("importModule", extObj.property("import")); // ...

Funciona bien, excepto en el caso de que el código de un módulo contenga tipos desconocidos.

módulo.js

 export var obj = new ccc("abcdef"); // ccc has not been declared yet

principal.js

 importModule("module.js", "Module"); console.log(Module.obj);

Si evalúo main.js , fallaría con el mensaje

"ReferenceError: el módulo no está definido"

Decidí agregar un Q_ASSERT en ModuleImportExtension::import y falla en este caso. Es decir, la instancia QJSValue del módulo no se establece como una propiedad en el objeto global del motor. ¿Podría explicarme por qué m_engine->globalObject().setProperty(jsIdentifier, moduleJsVal) no hace nada?

PS A pesar de que el módulo tiene tipos desconocidos, QJSEngine::importModule() no devuelve error (QJSValue::isError() es falso). Sin embargo, el resultado toString() de importModule() devuelve

ReferenceError: ccc no está definido

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!