En esta página

QJSEngine Class

La clase QJSEngine proporciona un entorno para evaluar código JavaScript. Más...

Cabecera: #include <QJSEngine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
Hereda: QObject
Heredado por:

QQmlEngine

Nota: Todas las funciones de esta clase son reentrantes.

Tipos Públicos

enum Extension { TranslationExtension, ConsoleExtension, GarbageCollectionExtension, AllExtensions }
flags Extensions
enum ObjectOwnership { CppOwnership, JavaScriptOwnership }

Propiedades

Funciones públicas

QJSEngine()
QJSEngine(QObject *parent)
virtual ~QJSEngine() override
(since Qt 6.1) QJSValue catchError()
To coerceValue(const From &from)
void collectGarbage()
QJSValue evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1, QStringList *exceptionStackTrace = nullptr)
T fromManagedValue(const QJSManagedValue &value)
T fromPrimitiveValue(const QJSPrimitiveValue &value)
T fromScriptValue(const QJSValue &value)
T fromVariant(const QVariant &value)
QJSValue globalObject() const
(since Qt 6.1) bool hasError() const
QJSValue importModule(const QString &fileName)
void installExtensions(QJSEngine::Extensions extensions, const QJSValue &object = QJSValue())
bool isInterrupted() const
QJSValue newArray(uint length = 0)
QJSValue newErrorObject(QJSValue::ErrorType errorType, const QString &message = QString())
QJSValue newObject()
QJSValue newQMetaObject()
QJSValue newQMetaObject(const QMetaObject *metaObject)
QJSValue newQObject(QObject *object)
(since 6.2) QJSValue newSymbol(const QString &name)
bool registerModule(const QString &moduleName, const QJSValue &value)
void setInterrupted(bool interrupted)
void setUiLanguage(const QString &language)
(since Qt 5.12) void throwError(const QString &message)
(since 6.1) void throwError(const QJSValue &error)
(since Qt 5.12) void throwError(QJSValue::ErrorType errorType, const QString &message = QString())
QJSManagedValue toManagedValue(const T &value)
QJSPrimitiveValue toPrimitiveValue(const T &value)
QJSValue toScriptValue(const T &value)
QString uiLanguage() const

Señales

Miembros públicos estáticos

QJSEngine::ObjectOwnership objectOwnership(QObject *object)
void setObjectOwnership(QObject *object, QJSEngine::ObjectOwnership ownership)
QJSEngine *qjsEngine(const QObject *object)

Descripción detallada

Evaluación de guiones

Utilice evaluate() para evaluar el código del script.

QJSEngine myEngine;
QJSValue three = myEngine.evaluate("1 + 2");

evaluate() devuelve un QJSValue que contiene el resultado de la evaluación. La clase QJSValue proporciona funciones para convertir el resultado a varios tipos de C++ (por ejemplo, QJSValue::toString() y QJSValue::toNumber()).

El siguiente fragmento de código muestra cómo se puede definir una función de script y luego invocarla desde C++ utilizando QJSValue::call():

QJSValue fun = myEngine.evaluate("(function(a, b) { return a + b; })");
QJSValueList args;
args << 1 << 2;
QJSValue threeAgain = fun.call(args);

Como puede verse en los fragmentos anteriores, un script se proporciona al motor en forma de cadena. Una forma común de cargar scripts es leyendo el contenido de un archivo y pasándolo a evaluate():

QString fileName = "helloworld.qs";
QFile scriptFile(fileName);
if (!scriptFile.open(QIODevice::ReadOnly))
    // handle error
QTextStream stream(&scriptFile);
QString contents = stream.readAll();
scriptFile.close();
myEngine.evaluate(contents, fileName);

Aquí pasamos el nombre del archivo como segundo argumento a evaluate(). Esto no afecta a la evaluación de ninguna manera; el segundo argumento es una cadena de propósito general que se almacena en el objeto Error para propósitos de depuración.

Para piezas más grandes de funcionalidad, es posible que desee encapsular su código y datos en módulos. Un módulo es un archivo que contiene código de script, variables, etc., y utiliza sentencias export para describir su interfaz con el resto de la aplicación. Con la ayuda de las sentencias import, un módulo puede referirse a la funcionalidad de otros módulos. Esto permite construir una aplicación con scripts a partir de pequeños bloques conectados de forma segura. Por el contrario, el enfoque de utilizar evaluate() conlleva el riesgo de que las variables o funciones internas de una llamada a evaluate() contaminen accidentalmente el objeto global y afecten a las evaluaciones posteriores.

El siguiente ejemplo proporciona un módulo que puede sumar números:

export function sum(left, right)
{
    return left + right
}

Este módulo puede cargarse con QJSEngine::import() si se guarda con el nombre math.mjs:

QJSvalue module = myEngine.importModule("./math.mjs");
QJSValue sumFunction = module.property("sum");
QJSValue result = sumFunction.call(args);

Los módulos también pueden usar funcionalidad de otros módulos usando sentencias import:

import { sum } from "./math.mjs";
export function addTwice(left, right)
{
    return sum(left, right) * 2;
}

Los módulos no tienen que ser archivos. Pueden ser valores registrados con QJSEngine::registerModule():

import version from "version";

export function getVersion()
{
    return version;
}
QJSValue version(610);
myEngine.registerModule("version", version);
QJSValue module = myEngine.importModule("./myprint.mjs");
QJSValue getVersion = module.property("getVersion");
QJSValue result = getVersion.call();

Se admiten exportaciones con nombre, pero como se tratan como miembros de un objeto, la exportación por defecto debe ser un objeto ECMAScript. La mayoría de las funciones newXYZ de QJSValue devolverán un objeto.

QJSValue name("Qt6");
QJSValue obj = myEngine.newObject();
obj.setProperty("name", name);
myEngine.registerModule("info", obj);
import { name } from "info";

export function getName()
{
    return name;
}

Configuración del motor

La función globalObject() devuelve el Objeto Global asociado con el motor de script. Las propiedades del Objeto Global son accesibles desde cualquier código de script (es decir, son variables globales). Normalmente, antes de evaluar los scripts "de usuario", querrá configurar un motor de scripts añadiendo una o más propiedades al Objeto Global:

myEngine.globalObject().setProperty("myNumber", 123);
...
QJSValue myNumberPlusOne = myEngine.evaluate("myNumber + 1");

Añadir propiedades personalizadas al entorno de scripts es uno de los medios estándar de proporcionar una API de scripts específica para su aplicación. Normalmente estas propiedades personalizadas son objetos creados por las funciones newQObject() o newObject().

Excepciones de script

evaluate() puede lanzar una excepción de script (por ejemplo, debido a un error de sintaxis). Si lo hace, entonces evaluate() devuelve el valor que fue lanzado (típicamente un objeto Error ). Utilice QJSValue::isError() para comprobar si hay excepciones.

Para obtener información detallada sobre el error, utilice QJSValue::toString() para obtener un mensaje de error, y utilice QJSValue::property() para consultar las propiedades del objeto Error. Están disponibles las siguientes propiedades:

  • name
  • message
  • fileName
  • lineNumber
  • stack
QJSValue result = myEngine.evaluate(...);if (result.isError())    qDebug()
           << "Uncaught exception at line"<< result.property("lineNumber").toInt() << ": "<< result.toString();

Creación de objetos de script

Utilice newObject() para crear un objeto JavaScript; es el equivalente en C++ de la sentencia de script new Object(). Puede utilizar la funcionalidad específica del objeto en QJSValue para manipular el objeto de script (por ejemplo, QJSValue::setProperty()). Del mismo modo, utilice newArray() para crear un objeto de matriz JavaScript.

Integración de QObject

Utilice newQObject() para envolver un puntero QObject (o subclase). newQObject() devuelve un objeto script proxy; las propiedades, los hijos y las señales y ranuras de QObject están disponibles como propiedades del objeto proxy. No se necesita código de vinculación porque se realiza dinámicamente utilizando el sistema de metaobjetos de Qt.

QPushButton *button = new QPushButton;QJSValue scriptButton = myEngine.newQObject(button); myEngine.globalObject().setProperty("button", scriptButton); myEngine.evaluate("button.checkable = true");
qDebug() << scriptButton.property("checkable").toBool();
scriptButton.property("show").call(); // llamar a la ranura show()

Use newQMetaObject() para envolver un QMetaObject; esto le da una "representación script" de una clase basada en QObject. newQMetaObject() devuelve un objeto script proxy; los valores enum de la clase están disponibles como propiedades del objeto proxy.

Los constructores expuestos al sistema de meta-objetos (usando Q_INVOKABLE) pueden ser llamados desde el script para crear una nueva instancia de QObject con JavaScriptOwnership. Por ejemplo, dada la siguiente definición de clase:

class MyObject : public QObject
{
    Q_OBJECT

public:
    Q_INVOKABLE MyObject() {}
};

El staticMetaObject para la clase puede ser expuesto a JavaScript de la siguiente manera:

QJSValue jsMetaObject = engine.newQMetaObject(&MyObject::staticMetaObject);
engine.globalObject().setProperty("MyObject", jsMetaObject);

Se pueden crear instancias de la clase en JavaScript:

engine.evaluate("var myObject = new MyObject()");

Nota: Actualmente sólo se admiten clases que utilicen la macro Q_OBJECT; no es posible exponer el staticMetaObject de una clase Q_GADGET a JavaScript.

Propiedades dinámicas de QObject

Las propiedades dinámicas de QObject no están soportadas. Por ejemplo, el siguiente código no funcionará:

QJSEngine motor;QObject *myQObject = new QObject();  myQObject->setProperty("dynamicProperty", 3);QJSValue myScriptQObject = engine.newQObject(myQObject); engine.globalObject().setProperty("myObject", myScriptQObject);
qDebug() << engine.evaluate("myObject.dynamicProperty").toInt();

Extensiones

QJSEngine proporciona una implementación ECMAScript compatible. Por defecto, las utilidades familiares como el registro no están disponibles, pero pueden instalarse a través de la función installExtensions().

Véase también QJSValue, Making Applications Scriptable, y List of JavaScript Objects and Functions.

Documentación de tipos de miembros

enum QJSEngine::Extensión
flags QJSEngine::Extensiones

Este enum se utiliza para especificar las extensiones que se instalarán a través de installExtensions().

ConstanteValorDescripción
QJSEngine::TranslationExtension0x1Indica que deben instalarse las funciones de traducción (qsTr(), por ejemplo). Esto también instala la propiedad Qt.uiLanguage.
QJSEngine::ConsoleExtension0x2Indica que deben instalarse funciones de consola (console.log(), por ejemplo).
QJSEngine::GarbageCollectionExtension0x4Indica que deben instalarse las funciones de recolección de basura (gc(), por ejemplo).
QJSEngine::AllExtensions0xffffffffIndica que deben instalarse todas las extensiones.

TraducciónExtensión

La relación entre las funciones de traducción de script y las funciones de traducción de C++ se describe en la siguiente tabla:

Función de scriptFunción C++ correspondiente
qsTr()QObject::tr()
QT_TR_NOOP()QT_TR_NOOP()
qsTranslate()QCoreApplication::translate()
QT_TRANSLATE_NOOP()QT_TRANSLATE_NOOP()
qsTrId()qtTrId()
QT_TRID_NOOP()QT_TRID_NOOP()

Esta bandera también añade una función arg() al prototipo de cadena.

Para más información, consulte la documentación Internacionalización con Qt.

ConsoleExtension

El objeto console implementa un subconjunto de la API Console, que proporciona funciones de registro conocidas, como console.log().

La lista de funciones añadidas es la siguiente

  • console.assert()
  • console.debug()
  • console.exception()
  • console.info()
  • console.log() (equivalente a console.debug())
  • console.error()
  • console.time()
  • console.timeEnd()
  • console.trace()
  • console.count()
  • console.warn()
  • print() (equivalente a console.debug())

Para obtener más información, consulte la documentación de la API de consola.

GarbageCollectionExtension

La función gc() es equivalente a llamar a collectGarbage().

El tipo Extensions es un typedef para QFlags<Extension>. Almacena una combinación OR de valores de Extensión.

enum QJSEngine::ObjectOwnership

ObjectOwnership controla si el gestor de memoria de JavaScript destruye o no automáticamente la dirección QObject cuando el motor recoge la basura del objeto JavaScript correspondiente. Las dos opciones de propiedad son

ConstanteValorDescripción
QJSEngine::CppOwnership0El objeto es propiedad del código C++ y el gestor de memoria JavaScript nunca lo borrará. El método JavaScript destroy() no se puede utilizar en estos objetos. Esta opción es similar a QScriptEngine::QtOwnership.
QJSEngine::JavaScriptOwnership1El objeto es propiedad de JavaScript. Cuando el objeto se devuelve al gestor de memoria JavaScript como valor de retorno de una llamada a un método, el gestor de memoria JavaScript lo rastreará y lo borrará si no quedan referencias JavaScript a él y no tiene QObject::parent(). Un objeto rastreado por un QJSEngine se eliminará durante el destructor de ese QJSEngine. Así, las referencias JavaScript entre objetos con JavaScriptOwnership de dos motores diferentes no serán válidas si se borra uno de ellos. Esta opción es similar a QScriptEngine::ScriptOwnership.

Generalmente una aplicación no necesita establecer la propiedad de un objeto explícitamente. El gestor de memoria JavaScript utiliza una heurística para establecer la propiedad por defecto. Por defecto, un objeto creado por el gestor de memoria JavaScript tiene JavaScriptOwnership. La excepción a esto son los objetos raíz creados llamando a QQmlComponent::create() o QQmlComponent::beginCreate(), que tienen CppOwnership por defecto. Se considera que la propiedad de estos objetos raíz se ha transferido a la persona que llama a C++.

Los objetos no creados por el gestor de memoria de JavaScript tienen CppOwnership por defecto. La excepción a esto son los objetos devueltos por llamadas a métodos C++; su propiedad se establecerá a JavaScriptOwnership. Esto sólo se aplica a las invocaciones explícitas de métodos o ranuras de Q_INVOKABLE, pero no a las invocaciones de obtención de propiedades.

La invocación a setObjectOwnership() anula la propiedad por defecto.

Véase también Propiedad de los datos.

Documentación de propiedades

uiLanguage : QString

Esta propiedad contiene el idioma que se utilizará para traducir las cadenas de la interfaz de usuario

Esta propiedad contiene el nombre del idioma que se utilizará para traducir las cadenas de la interfaz de usuario. Se expone para lectura y escritura como Qt.uiLanguage cuando QJSEngine::TranslationExtension está instalado en el motor. Siempre está expuesta en instancias de QQmlEngine.

Puedes establecer el valor libremente y utilizarlo en los enlaces. Se recomienda establecerlo después de instalar los traductores en su aplicación. Por convención, una cadena vacía significa que no se pretende realizar ninguna traducción desde el idioma utilizado en el código fuente.

Funciones de acceso:

QString uiLanguage() const
void setUiLanguage(const QString &language)

Señal de notificador:

void uiLanguageChanged()

Documentación de funciones miembro

QJSEngine::QJSEngine()

Construye un objeto QJSEngine.

globalObject() se inicializa para que tenga las propiedades descritas en ECMA-262, Sección 15.1.

[explicit] QJSEngine::QJSEngine(QObject *parent)

Construye un objeto QJSEngine con la dirección parent.

globalObject() se inicializa para que tenga las propiedades descritas en ECMA-262, Sección 15.1.

[override virtual noexcept] QJSEngine::~QJSEngine()

Destruye este QJSEngine.

La basura no se recoge del montón persistente de JS durante la destrucción de QJSEngine. Si necesitas liberar toda la memoria, llama a collectGarbage() manualmente justo antes de destruir QJSEngine.

[since Qt 6.1] QJSValue QJSEngine::catchError()

Si hay una excepción pendiente, la atrapa y la devuelve como QJSValue. En caso contrario, devuelve undefined como QJSValue. Después de llamar a este método hasError() devuelve false.

Esta función fue introducida en Qt 6.1.

template <typename From, typename To> To QJSEngine::coerceValue(const From &from)

Devuelve el from dado convertido al tipo de plantilla To. La conversión se realiza en la semántica de JavaScript. Ésta difiere de la semántica de qvariant_cast. Hay una serie de conversiones implícitas entre tipos equivalentes de JavaScript que qvariant_cast no realiza por defecto. Este método es una generalización de todos los demás métodos de conversión de esta clase.

Véase también fromVariant(), qvariant_cast(), fromScriptValue(), y toScriptValue().

void QJSEngine::collectGarbage()

Ejecuta el recolector de basura.

El recolector de basura intentará recuperar memoria localizando y eliminando los objetos que ya no son accesibles en el entorno del script.

Normalmente no es necesario llamar a esta función; el recolector de basura será invocado automáticamente cuando QJSEngine decida que es prudente hacerlo (es decir, cuando se haya creado un cierto número de objetos nuevos). Sin embargo, puede llamar a esta función para solicitar explícitamente que la recolección de basura se realice lo antes posible.

Véase también Recogida de basura y gc().

QJSValue QJSEngine::evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1, QStringList *exceptionStackTrace = nullptr)

Evalúa program, utilizando lineNumber como número de línea base, y devuelve el resultado de la evaluación.

El código de script se evaluará en el contexto del objeto global.

Nota: Si necesita evaluar dentro de un contexto QML, utilice QQmlExpression en su lugar.

La evaluación de program puede causar una exception en el motor; en este caso el valor de retorno será la excepción lanzada (típicamente un objeto Error; ver QJSValue::isError()).

lineNumber se utiliza para especificar un número de línea inicial para program; la información sobre el número de línea proporcionada por el motor en relación con esta evaluación se basará en este argumento. Por ejemplo, si program consiste en dos líneas de código, y la sentencia en la segunda línea causa una excepción de script, el número de línea de excepción sería lineNumber más uno. Si no se especifica un número de línea inicial, los números de línea se basarán en 1.

fileName se utiliza para la notificación de errores. Por ejemplo, en los objetos de error el nombre del archivo es accesible a través de la propiedad "fileName" si se proporciona con esta función.

exceptionStackTrace se utiliza para informar de si se ha lanzado una excepción no capturada. Si le pasas un puntero no nulo a QStringList, lo establecerá como una lista de "mensajes de pila" si el script lanzó una excepción no gestionada, o una lista vacía en caso contrario. Un mensaje stackframe tiene el formato nombre de función:número de línea:columna:nombre de archivo

Nota: En algunos casos, por ejemplo para funciones nativas, el nombre de la función y el nombre del archivo pueden estar vacíos y el número de línea y la columna pueden ser -1.

Nota: Si se lanza una excepción y el valor de la excepción no es una instancia de Error (es decir, QJSValue::isError() devuelve false), se devolverá igualmente el valor de la excepción. Utilice exceptionStackTrace->isEmpty() para distinguir si el valor devuelto era normal o excepcional.

Véase también QQmlExpression::evaluate.

template <typename T> T QJSEngine::fromManagedValue(const QJSManagedValue &value)

Devuelve el value dado convertido al tipo de plantilla T.

Véase también toManagedValue() y coerceValue().

template <typename T> T QJSEngine::fromPrimitiveValue(const QJSPrimitiveValue &value)

Devuelve el value dado convertido al tipo de plantilla T.

Dado que QJSPrimitiveValue sólo puede contener int, bool, double, QString, y los equivalentes de JavaScript null y undefined, el valor se coaccionará agresivamente si se solicita cualquier otro tipo.

Véase también toPrimitiveValue() y coerceValue().

template <typename T> T QJSEngine::fromScriptValue(const QJSValue &value)

Devuelve el value dado convertido al tipo de plantilla T.

Véase también toScriptValue() y coerceValue().

template <typename T> T QJSEngine::fromVariant(const QVariant &value)

Devuelve el value dado convertido al tipo de plantilla T. La conversión se realiza en la semántica de JavaScript. Ésta difiere de la semántica de qvariant_cast. Hay una serie de conversiones implícitas entre tipos equivalentes de JavaScript que qvariant_cast no realiza por defecto.

Véase también coerceValue(), fromScriptValue(), y qvariant_cast().

QJSValue QJSEngine::globalObject() const

Devuelve el Objeto Global de este motor.

Por defecto, el Objeto Global contiene los objetos incorporados que forman parte de ECMA-262, como Math, Date y String. Además, puede establecer propiedades del Objeto Global para hacer que sus propias extensiones estén disponibles para todo el código de script. Las variables no locales en el código de script se crearán como propiedades del Objeto Global, así como las variables locales en el código global.

[since Qt 6.1] bool QJSEngine::hasError() const

Devuelve true si la última ejecución de JavaScript resultó en una excepción o si se llamó a throwError(). En caso contrario devuelve false. Tenga en cuenta que evaluate() captura cualquier excepción lanzada en el código evaluado.

Esta función se introdujo en Qt 6.1.

QJSValue QJSEngine::importModule(const QString &fileName)

Importa el módulo ubicado en fileName y devuelve un objeto de espacio de nombres de módulo que contiene todas las variables, constantes y funciones exportadas como propiedades.

Si es la primera vez que se importa el módulo en el motor, el archivo se carga desde la ubicación especificada en el sistema de archivos local o en el sistema de recursos Qt y se evalúa como un módulo ECMAScript. Se espera que el archivo esté codificado en texto UTF-8.

Las importaciones posteriores del mismo módulo devolverán la instancia importada anteriormente. Los módulos son singletons y permanecen hasta que se destruye el motor.

La dirección fileName especificada se normalizará internamente mediante QFileInfo::canonicalFilePath(). Esto significa que múltiples importaciones del mismo archivo en disco usando diferentes rutas relativas cargarán el archivo sólo una vez.

Nota: Si se lanza una excepción durante la carga del módulo, el valor de retorno será la excepción (típicamente un objeto Error; véase QJSValue::isError()).

Véase también registerModule().

void QJSEngine::installExtensions(QJSEngine::Extensions extensions, const QJSValue &object = QJSValue())

Instala JavaScript extensions para añadir funciones que no están disponibles en una implementación estándar de ECMAScript.

Las extensiones se instalan en el object dado, o en el Global Object si no se especifica ningún objeto.

Se pueden instalar varias extensiones a la vez mediante OR-ing los valores enum:

installExtensions(QJSEngine::TranslationExtension | QJSEngine::ConsoleExtension);

Véase también Extension.

bool QJSEngine::isInterrupted() const

Devuelve si la ejecución de JavaScript está actualmente interrumpida.

Véase también setInterrupted().

QJSValue QJSEngine::newArray(uint length = 0)

Crea un objeto JavaScript de la clase Array con la dirección length.

Véase también newObject().

QJSValue QJSEngine::newErrorObject(QJSValue::ErrorType errorType, const QString &message = QString())

Crea un objeto JavaScript de la clase Error, con message como mensaje de error.

El prototipo del objeto creado será errorType.

Véase también newObject(), throwError(), y QJSValue::isError().

QJSValue QJSEngine::newObject()

Crea un objeto JavaScript de la clase Object.

El prototipo del objeto creado será el objeto prototipo Object.

Véase también newArray() y QJSValue::setProperty().

template <typename T> QJSValue QJSEngine::newQMetaObject()

Crea un objeto JavaScript que envuelve la estática QMetaObject asociada a la clase T.

Véase también newQObject() y QObject Integration.

QJSValue QJSEngine::newQMetaObject(const QMetaObject *metaObject)

Crea un objeto JavaScript que envuelve el QMetaObject dado. El metaObject debe sobrevivir al motor de script. Se recomienda utilizar este método sólo con metaobjetos estáticos.

Cuando se llama como constructor, se crea una nueva instancia de la clase. Sólo los constructores expuestos por Q_INVOKABLE serán visibles desde el motor de scripts.

Véase también newQObject() y QObject Integration.

QJSValue QJSEngine::newQObject(QObject *object)

Crea un objeto JavaScript que envuelve el QObject dado object, utilizando JavaScriptOwnership.

Las señales y ranuras, propiedades e hijos de object están disponibles como propiedades del objeto creado QJSValue.

Si object es un puntero nulo, esta función devuelve un valor nulo.

Si se ha registrado un prototipo por defecto para la clase object(o su superclase, recursivamente), el prototipo del nuevo objeto script será ese prototipo por defecto.

Si el object dado se elimina fuera del control del motor, cualquier intento de acceder a los miembros del QObject'eliminado a través del objeto JavaScript wrapper (ya sea por código script o C++) resultará en un script exception.

Véase también QJSValue::toQObject().

[since 6.2] QJSValue QJSEngine::newSymbol(const QString &name)

Crea un objeto JavaScript de clase Symbol, con valor name.

El prototipo del objeto creado será el objeto Symbol prototype.

Esta función se introdujo en Qt 6.2.

Véase también newObject().

[static] QJSEngine::ObjectOwnership QJSEngine::objectOwnership(QObject *object)

Devuelve la propiedad de object.

Véase también setObjectOwnership() y QJSEngine::ObjectOwnership.

bool QJSEngine::registerModule(const QString &moduleName, const QJSValue &value)

Registra un QJSValue para servir como módulo. Después de llamar a esta función, todos los módulos que importen moduleName importarán el valor de value en lugar de cargar moduleName del sistema de ficheros.

Se puede registrar cualquier QJSValue válido, pero las exportaciones con nombre (es decir, import { name } from "info" se tratan como miembros de un objeto, por lo que la exportación por defecto debe crearse con uno de los métodos newXYZ de QJSEngine.

Dado que esto permite importar módulos que no existen en el sistema de archivos, las aplicaciones de scripting pueden utilizarlo para proporcionar módulos integrados, de forma similar a Node.js.

Devuelve true en caso de éxito, false en caso contrario.

Nota: El QJSValue value no es llamado o leído hasta que es usado por otro módulo. Esto significa que no hay código que evaluar, por lo que no se verán errores hasta que otro módulo lance una excepción al intentar cargar este módulo.

Advertencia: Intentar acceder a una exportación con nombre desde un QJSValue que no es un objeto provocará un exception.

Véase también importModule().

void QJSEngine::setInterrupted(bool interrupted)

Interrumpe o reactiva la ejecución de JavaScript.

Si interrupted es true, cualquier JavaScript ejecutado por este motor aborta inmediatamente y devuelve un objeto de error hasta que esta función es llamada de nuevo con un valor de false para interrupted.

Esta función es segura para subprocesos. Puede llamarla desde un hilo diferente para interrumpir, por ejemplo, un bucle infinito en JavaScript.

Véase también isInterrupted().

[static] void QJSEngine::setObjectOwnership(QObject *object, QJSEngine::ObjectOwnership ownership)

Establece el ownership de object.

Un objeto con JavaScriptOwnership no es recolectado mientras tenga un padre, incluso si no hay referencias a él.

Véase también objectOwnership() y QJSEngine::ObjectOwnership.

[since Qt 5.12] void QJSEngine::throwError(const QString &message)

Lanza un error en tiempo de ejecución (excepción) con la dirección message.

Este método es el equivalente en C++ de una expresión throw() en JavaScript. Permite que el código C++ informe de errores en tiempo de ejecución a QJSEngine. Por lo tanto, sólo debe invocarse desde código C++ que haya sido invocado por una función JavaScript a través de QJSEngine.

Al volver de C++, el motor interrumpirá el flujo normal de ejecución y llamará al siguiente gestor de excepciones prerregistrado con un objeto de error que contiene el message dado. El objeto de error apuntará a la ubicación del contexto más alto de la pila de llamadas de JavaScript; en concreto, tendrá las propiedades lineNumber, fileName y stack. Estas propiedades se describen en Script Exceptions.

En el siguiente ejemplo, un método C++ en FileAccess.cpp lanza un error en qmlFile.qml en la posición donde se llama a readFileAsText():

// qmlFile.qml
function someFunction() {
  ...
  var text = FileAccess.readFileAsText("/path/to/file.txt");
}
// FileAccess.cpp
// Assuming that FileAccess is a QObject-derived class that has been
// registered as a singleton type and provides an invokable method
// readFileAsText()

QJSValue FileAccess::readFileAsText(const QString & filePath) {
  QFile file(filePath);

  if (!file.open(QIODevice::ReadOnly)) {
    jsEngine->throwError(file.errorString());
    return QString();
  }

  ...
  return content;
}

También es posible capturar el error arrojado en JavaScript:

// qmlFile.qml
function someFunction() {
  ...
  var text;
  try {
    text = FileAccess.readFileAsText("/path/to/file.txt");
  } catch (error) {
    console.warn("In " + error.fileName + ":" + "error.lineNumber" +
                 ": " + error.message);
  }
}

Si necesita un error de ejecución más específico para describir una excepción, puede utilizar la sobrecarga throwError(QJSValue::ErrorType errorType, const QString &message).

Esta función se introdujo en Qt 5.12.

Véase también Script Exceptions.

[since 6.1] void QJSEngine::throwError(const QJSValue &error)

Lanza un error en tiempo de ejecución preconstruido error (excepción). De esta forma puede utilizar newErrorObject() para crear el error y personalizarlo según sea necesario.

Esta función sobrecarga QJSEngine::throwError().

Esta función se introdujo en Qt 6.1.

Véase también Script Exceptions y newErrorObject().

[since Qt 5.12] void QJSEngine::throwError(QJSValue::ErrorType errorType, const QString &message = QString())

Lanza un error en tiempo de ejecución (excepción) con los datos errorType y message.

// Assuming that DataEntry is a QObject-derived class that has been
// registered as a singleton type and provides an invokable method
// setAge().

void DataEntry::setAge(int age) {
  if (age < 0 || age > 200) {
    jsEngine->throwError(QJSValue::RangeError,
                         "Age must be between 0 and 200");
  }
  ...
}

Esta función sobrecarga QJSEngine::throwError().

Esta función se introdujo en Qt 5.12.

Véase también Script Exceptions y newErrorObject().

template <typename T> QJSManagedValue QJSEngine::toManagedValue(const T &value)

Crea un QJSManagedValue con el value dado.

Véase también fromManagedValue() y coerceValue().

template <typename T> QJSPrimitiveValue QJSEngine::toPrimitiveValue(const T &value)

Crea un QJSPrimitiveValue con el tipo value.

Dado que QJSPrimitiveValue sólo puede contener int, bool, double, QString, y los equivalentes de JavaScript null y undefined, el valor se coaccionará agresivamente si se pasa cualquier otro tipo.

Véase también fromPrimitiveValue() y coerceValue().

template <typename T> QJSValue QJSEngine::toScriptValue(const T &value)

Crea un QJSValue con el value dado.

Véase también fromScriptValue() y coerceValue().

No miembros relacionados

QJSEngine *qjsEngine(const QObject *object)

Devuelve el QJSEngine asociado con object, si existe.

Esta función es útil si ha expuesto un QObject al entorno JavaScript y más adelante en su programa desea recuperar el acceso. No requiere que mantengas la envoltura alrededor que fue devuelta desde QJSEngine::newQObject().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.