Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

220
Visualizações
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
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda