Sur cette page

QJSManagedValue Class

QJSManagedValue représente une valeur sur le tas JavaScript appartenant à une QJSEngine. Plus....

En-tête : #include <QJSManagedValue>
CMake : find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake : QT += qml
Depuis : Qt 6.1

Types publics

enum Type { Undefined, Boolean, Number, String, Object, …, Function }

Fonctions publiques

QJSManagedValue()
QJSManagedValue(QJSValue value, QJSEngine *engine)
QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine)
QJSManagedValue(const QString &string, QJSEngine *engine)
QJSManagedValue(const QVariant &variant, QJSEngine *engine)
QJSManagedValue(QJSManagedValue &&other)
~QJSManagedValue()
QJSValue call(const QJSValueList &arguments = {}) const
QJSValue callAsConstructor(const QJSValueList &arguments = {}) const
QJSValue callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const
bool deleteProperty(const QString &name)
bool deleteProperty(quint32 arrayIndex)
QJSEngine *engine() const
bool equals(const QJSManagedValue &other) const
bool hasOwnProperty(const QString &name) const
bool hasOwnProperty(quint32 arrayIndex) const
bool hasProperty(const QString &name) const
bool hasProperty(quint32 arrayIndex) const
bool isArray() const
bool isBoolean() const
bool isDate() const
bool isError() const
bool isFunction() const
bool isInteger() const
bool isNull() const
bool isNumber() const
bool isObject() const
bool isQMetaObject() const
bool isQObject() const
bool isRegularExpression() const
bool isString() const
bool isSymbol() const
bool isUndefined() const
bool isUrl() const
bool isVariant() const
QJSValue property(const QString &name) const
QJSValue property(quint32 arrayIndex) const
QJSManagedValue prototype() const
void setProperty(const QString &name, const QJSValue &value)
void setProperty(quint32 arrayIndex, const QJSValue &value)
void setPrototype(const QJSManagedValue &prototype)
bool strictlyEquals(const QJSManagedValue &other) const
bool toBoolean() const
QDateTime toDateTime() const
int toInteger() const
QJSValue toJSValue() const
double toNumber() const
QJSPrimitiveValue toPrimitive() const
const QMetaObject *toQMetaObject() const
QObject *toQObject() const
QRegularExpression toRegularExpression() const
QString toString() const
QUrl toUrl() const
QVariant toVariant() const
QJSManagedValue::Type type() const
QJSManagedValue &operator=(QJSManagedValue &&other)

Description détaillée

La classe QJSManagedValue permet d'interagir avec les valeurs JavaScript de la plupart des façons dont vous pouvez interagir avec elles à partir de JavaScript lui-même. Vous pouvez obtenir et définir des propriétés et des prototypes, et vous pouvez accéder à des tableaux. En outre, vous pouvez transformer la valeur en contreparties Qt des objets JavaScript. Par exemple, un objet Url peut être transformé en QUrl.

Une QJSManagedValue est toujours liée à une QJSEngine particulière. Vous ne pouvez pas l'utiliser indépendamment. Cela signifie qu'une QJSManagedValue d'un moteur ne peut pas être une propriété ou un proptotype d'une QJSManagedValue d'un moteur différent.

Contrairement à QJSValue, presque toutes les valeurs détenues par QJSManagedValue vivent sur le tas JavaScript. Il n'y a pas de stockage en ligne ou non géré. Par conséquent, vous pouvez obtenir le prototype d'une valeur primitive et la propriété length d'une chaîne de caractères.

Seules les QJSManagedValues construites par défaut ou déplacées depuis ne détiennent pas de valeur sur le tas JavaScript. Elles représentent undefined, qui n'a pas de propriétés ni de prototypes.

Contrairement à QJSValue, QJSManagedValue n'attrape aucune exception JavaScript. Si une opération sur une QJSManagedValue provoque une erreur, elle renvoie généralement une valeur undefined et QJSEngine::hasError() renvoie ensuite true. Vous pouvez alors rattraper l'exception à l'aide de QJSEngine::catchError(), ou la faire remonter sur la pile, à votre convenance.

Remarque : étant donné que la référence à la valeur sur le tas JavaScript doit être libérée lors de la destruction, vous ne pouvez pas déplacer une QJSManagedValue vers un autre thread. La destruction aurait lieu dans le nouveau thread, ce qui créerait une condition de course avec le ramasse-miettes du thread d'origine. Cela signifie également que vous ne pouvez pas conserver une QJSManagedValue au-delà de la durée de vie de son moteur.

La méthode recommandée pour travailler avec une QJSManagedValue consiste à la créer sur la pile, éventuellement en déplaçant une page QJSValue et en ajoutant un moteur, puis à effectuer les opérations nécessaires sur elle, et enfin à la replacer dans une page QJSValue pour la stocker. Les déplacements entre QJSManagedValue et QJSValue sont rapides.

Documentation sur les types de membres

enum QJSManagedValue::Type

Cette énumération représente les types natifs de JavaScript, tels que spécifiés par l'ECMA-262.

ConstanteValeurDescription du type
QJSManagedValue::Undefined0Le type undefined
QJSManagedValue::Boolean1Le type boolean
QJSManagedValue::Number2Le type number
QJSManagedValue::String3Le type string
QJSManagedValue::Object4Le type object
QJSManagedValue::Symbol5Le type symbol
QJSManagedValue::Function6Le type function

Notez que la valeur null n'est pas un type en soi, mais plutôt un type spécial d'objet. Vous pouvez interroger un QJSManagedValue pour cette condition en utilisant la méthode isNull(). En outre, JavaScript n'a pas de type entier, mais il connaît un traitement spécial des nombres en vue d'opérations portant uniquement sur des entiers. Vous pouvez interroger un site QJSManagedValue pour savoir s'il contient le résultat d'un tel traitement en utilisant la méthode isInteger().

Documentation sur les fonctions membres

[constexpr noexcept] QJSManagedValue::QJSManagedValue()

Crée une QJSManagedValue qui représente la valeur de JavaScript undefined. C'est la seule valeur qui n'est pas stockée sur le tas JavaScript. L'appel à engine() sur une QJSManagedValue construite par défaut renverra nullptr.

QJSManagedValue::QJSManagedValue(QJSValue value, QJSEngine *engine)

Crée une QJSManagedValue à partir de value, en utilisant le tas de engine. Si value est lui-même géré et que le moteur auquel il appartient n'est pas engine, le résultat est une valeur undefined, et un avertissement est généré.

QJSManagedValue::QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine)

Crée une QJSManagedValue à partir de value en utilisant le tas de engine.

QJSManagedValue::QJSManagedValue(const QString &string, QJSEngine *engine)

Crée une QJSManagedValue à partir de string en utilisant le tas de engine.

QJSManagedValue::QJSManagedValue(const QVariant &variant, QJSEngine *engine)

Crée une QJSManagedValue à partir de variant en utilisant le tas de engine.

QJSManagedValue::QJSManagedValue(QJSManagedValue &&other)

Move-construit une QJSManagedValue à partir de other. Cela laisse other dans l'état construit par défaut où il représente undefined et n'appartient à aucun moteur.

[noexcept] QJSManagedValue::~QJSManagedValue()

Détruit le site QJSManagedValue.

Remarque : cette opération libère l'emplacement mémoire qu'il occupe dans le tas JavaScript. Vous ne devez pas détruire un QJSManagedValue à partir d'un thread différent de celui où se trouve le QJSEngine auquel il appartient.

QJSValue QJSManagedValue::call(const QJSValueList &arguments = {}) const

Si ce QJSManagedValue représente un FunctionObject JavaScript, il l'appelle avec le arguments donné et renvoie le résultat. Sinon, il renvoie une valeur JavaScript undefined.

Les arguments doivent être des valeurs primitives ou appartenir au même QJSEngine que ce QJSManagedValue. Sinon, l'appel n'est pas exécuté et une valeur JavaScript undefined est renvoyée.

QJSValue QJSManagedValue::callAsConstructor(const QJSValueList &arguments = {}) const

Si ce QJSManagedValue représente un FunctionObject JavaScript, il l'appelle en tant que constructeur avec le arguments donné, et renvoie le résultat. Sinon, il renvoie une valeur JavaScript undefined.

Les arguments doivent être des valeurs primitives ou appartenir au même QJSEngine que ce QJSManagedValue. Sinon, l'appel n'est pas exécuté et une valeur JavaScript undefined est renvoyée.

QJSValue QJSManagedValue::callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const

Si ce QJSManagedValue représente un FunctionObject JavaScript, il l'appelle sur instance avec le arguments donné, et renvoie le résultat. Sinon, il renvoie une valeur JavaScript undefined.

Les arguments et instance doivent être des valeurs primitives ou appartenir au même QJSEngine que ce QJSManagedValue. Sinon, l'appel n'est pas exécuté et une valeur JavaScript undefined est renvoyée.

bool QJSManagedValue::deleteProperty(const QString &name)

Supprime la propriété name de ce site QJSManagedValue. Renvoie true si la suppression a réussi, ou false dans le cas contraire.

bool QJSManagedValue::deleteProperty(quint32 arrayIndex)

Supprime la valeur stockée à l'adresse arrayIndex de cette adresse QJSManagedValue. Renvoie true si la suppression a réussi, ou false dans le cas contraire.

QJSEngine *QJSManagedValue::engine() const

Renvoie l'adresse QJSEngine à laquelle appartient ce QJSManagedValue. Notez que le moteur est toujours valide, à moins que le QJSManagedValue ne soit construit par défaut ou déplacé. Dans ce dernier cas, une nullptr est renvoyée.

bool QJSManagedValue::equals(const QJSManagedValue &other) const

Invoque l'opérateur JavaScript '==' sur les sites QJSManagedValue et other, et renvoie le résultat.

Voir également strictlyEquals.

bool QJSManagedValue::hasOwnProperty(const QString &name) const

Renvoie true si ce QJSManagedValue a une propriété name, sinon renvoie false. Les propriétés de la chaîne de prototypes ne sont pas prises en compte.

bool QJSManagedValue::hasOwnProperty(quint32 arrayIndex) const

Renvoie true si ce QJSManagedValue a un index de tableau arrayIndex, sinon renvoie false. Les propriétés de la chaîne de prototypes ne sont pas prises en compte.

bool QJSManagedValue::hasProperty(const QString &name) const

Renvoie true si ce QJSManagedValue a une propriété name, sinon renvoie false. Les propriétés de la chaîne de prototypes sont prises en compte.

bool QJSManagedValue::hasProperty(quint32 arrayIndex) const

Renvoie true si ce QJSManagedValue a un index de tableau arrayIndex, sinon renvoie false. Les propriétés de la chaîne de prototypes sont prises en compte.

bool QJSManagedValue::isArray() const

Renvoie true si cette valeur représente un objet JavaScript Array, ou false dans le cas contraire.

bool QJSManagedValue::isBoolean() const

Renvoie true si le type de ce QJSManagedValue est boolean, ou false dans le cas contraire.

bool QJSManagedValue::isDate() const

Renvoie true si cette valeur représente un objet JavaScript Date, ou false dans le cas contraire.

bool QJSManagedValue::isError() const

Renvoie true si cette valeur représente un objet JavaScript Error, ou false dans le cas contraire.

bool QJSManagedValue::isFunction() const

Renvoie true si le type de ce QJSManagedValue est function, false sinon.

bool QJSManagedValue::isInteger() const

Renvoie true si QJSManagedValue contient une valeur entière, ou false dans le cas contraire. Le format de stockage d'un nombre n'affecte pas le résultat des opérations effectuées sur celui-ci, mais si un entier est stocké, de nombreuses opérations sont plus rapides.

bool QJSManagedValue::isNull() const

Renvoie true si ce QJSManagedValue contient la valeur JavaScript null, ou false dans le cas contraire.

bool QJSManagedValue::isNumber() const

Renvoie true si le type de ce QJSManagedValue est number, ou false dans le cas contraire.

bool QJSManagedValue::isObject() const

Renvoie true si le type de ce QJSManagedValue est object, ou false dans le cas contraire.

bool QJSManagedValue::isQMetaObject() const

Renvoie true si cette valeur représente un pointeur QMetaObject géré sur le tas JavaScript, ou false dans le cas contraire.

bool QJSManagedValue::isQObject() const

Renvoie true si cette valeur représente un pointeur QObject géré sur le tas JavaScript, ou false dans le cas contraire.

bool QJSManagedValue::isRegularExpression() const

Renvoie true si cette valeur représente un objet d'expression régulière JavaScript, ou false dans le cas contraire.

bool QJSManagedValue::isString() const

Renvoie true si le type de ce QJSManagedValue est string, ou false dans le cas contraire.

bool QJSManagedValue::isSymbol() const

Renvoie true si le type de ce QJSManagedValue est symbol, ou false dans le cas contraire.

bool QJSManagedValue::isUndefined() const

Renvoie true si le type de ce QJSManagedValue est undefined, ou false dans le cas contraire.

bool QJSManagedValue::isUrl() const

Renvoie true si cette valeur représente un objet JavaScript Url, ou false dans le cas contraire.

bool QJSManagedValue::isVariant() const

Renvoie true si cette valeur représente un QVariant géré sur le tas JavaScript, ou false dans le cas contraire.

QJSValue QJSManagedValue::property(const QString &name) const

Renvoie la propriété name de ce QJSManagedValue. La chaîne de prototypes est consultée si la propriété n'est pas trouvée sur l'objet réel.

Voir aussi setProperty().

QJSValue QJSManagedValue::property(quint32 arrayIndex) const

Renvoie la propriété stockée à l'adresse arrayIndex de ce QJSManagedValue. La chaîne de prototypes est consultée si la propriété n'est pas trouvée sur l'objet réel.

QJSManagedValue QJSManagedValue::prototype() const

Renvoie le prototype de cette QJSManagedValue. Cela fonctionne avec n'importe quelle valeur. Vous pouvez, par exemple, récupérer le prototype JavaScript boolean à partir d'une valeur boolean.

Voir aussi setPrototype().

void QJSManagedValue::setProperty(const QString &name, const QJSValue &value)

Définit la propriété name à value sur ce QJSManagedValue. Cette opération ne peut être effectuée que sur des valeurs JavaScript de type object. De plus, value doit être une primitive ou appartenir au même moteur que cette valeur.

Voir aussi property().

void QJSManagedValue::setProperty(quint32 arrayIndex, const QJSValue &value)

Stocke la valeur value à arrayIndex dans cette valeur QJSManagedValue. Cette opération ne peut être effectuée que sur des valeurs JavaScript de type object, et n'est pas recommandée si la valeur n'est pas un tableau. De plus, value doit être une primitive ou appartenir au même moteur que cette valeur.

void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)

Définit le prototype de ce QJSManagedValue à prototype. Une condition préalable est que prototype appartienne au même QJSEngine que ce QJSManagedValue et soit un objet (y compris null). En outre, ce QJSManagedValue doit également être un objet (à l'exclusion de null), et vous ne pouvez pas créer de cycles de prototypes.

Voir aussi prototype().

bool QJSManagedValue::strictlyEquals(const QJSManagedValue &other) const

Invoque l'opérateur JavaScript '===' sur ce site QJSManagedValue et other, et renvoie le résultat.

Voir également equals.

bool QJSManagedValue::toBoolean() const

Convertit la valeur gérée en un booléen. Si la valeur gérée contient un booléen, celui-ci est renvoyé. Sinon, une coercion booléenne est effectuée selon les règles JavaScript.

QDateTime QJSManagedValue::toDateTime() const

Si cette adresse QJSManagedValue contient un objet JavaScript Date, elle renvoie une adresse QDateTime équivalente. Sinon, il renvoie un objet invalide.

int QJSManagedValue::toInteger() const

Convertit la valeur gérée en un entier. Ceci convertit d'abord la valeur en un nombre selon les règles de toNumber(), puis l'enferme dans la plage des entiers selon les règles données pour contraindre les arguments des opérateurs de décalage de bits JavaScript en entiers de 32 bits.

En interne, la valeur peut déjà être stockée sous la forme d'un entier, auquel cas un chemin rapide est emprunté.

Remarque : la conversion d'une valeur gérée en un nombre peut entraîner une exception. En particulier, les symboles ne peuvent pas être convertis en nombres, ou une méthode valueOf() personnalisée peut être déclenchée. Dans ce cas, le résultat est 0 et le moteur affiche une erreur après la conversion.

Remarque : les règles JavaScript de conversion des nombres en entiers de 32 bits ne sont pas intuitives.

QJSValue QJSManagedValue::toJSValue() const

Copie ce QJSManagedValue dans un nouveau QJSValue. Ceci est moins efficace que de construire un QJSValue à partir d'un QJSManagedValue, mais conserve le QJSManagedValue.

double QJSManagedValue::toNumber() const

Convertit la valeur gérée en un nombre. Si la valeur gérée contient un nombre, celui-ci est renvoyé. Dans le cas contraire, une coercion des nombres selon les règles JavaScript est effectuée.

Remarque : la conversion d'une valeur gérée en un nombre peut générer une exception. En particulier, les symboles ne peuvent pas être convertis en nombres, ou une méthode valueOf() personnalisée peut être déclenchée. Dans ce cas, le résultat est 0 et le moteur affiche une erreur après la conversion.

QJSPrimitiveValue QJSManagedValue::toPrimitive() const

Convertit la valeur gérée en QJSPrimitiveValue. Si la valeur gérée contient un type pris en charge par QJSPrimitiveValue, la valeur est copiée. Sinon, la valeur est convertie en chaîne de caractères, et la chaîne est stockée dans QJSPrimitiveValue.

Remarque : la conversion d'une valeur gérée en chaîne de caractères peut générer une exception. En particulier, les symboles ne peuvent pas être convertis en chaînes de caractères, ou une méthode personnalisée toString() peut être déclenchée. Dans ce cas, le résultat est une valeur non définie et le moteur signale une erreur après la conversion.

const QMetaObject *QJSManagedValue::toQMetaObject() const

Si ce site QJSManagedValue contient un pointeur QMetaObject, il le renvoie. Sinon, il renvoie nullptr.

QObject *QJSManagedValue::toQObject() const

Si ce site QJSManagedValue contient un pointeur QObject, il le renvoie. Sinon, il renvoie nullptr.

QRegularExpression QJSManagedValue::toRegularExpression() const

Si cette adresse QJSManagedValue contient un objet d'expression régulière JavaScript, elle renvoie une adresse QRegularExpression équivalente. Sinon, il renvoie une expression non valide.

QString QJSManagedValue::toString() const

Convertit la valeur gérée en chaîne de caractères. Si la valeur gérée contient une chaîne, celle-ci est renvoyée. Dans le cas contraire, une coercion de chaîne selon les règles JavaScript est effectuée.

Remarque : la conversion d'une valeur gérée en chaîne de caractères peut générer une exception. En particulier, les symboles ne peuvent pas être convertis en chaînes de caractères, ou une méthode toString() personnalisée peut être déclenchée. Dans ce cas, le résultat est une chaîne vide et le moteur affiche une erreur après la conversion.

QUrl QJSManagedValue::toUrl() const

Si cette adresse QJSManagedValue contient un objet JavaScript Url, elle renvoie une adresse QUrl équivalente. Sinon, il renvoie un objet invalide.

QVariant QJSManagedValue::toVariant() const

Copie ce QJSManagedValue dans un nouveau QVariant. Cela crée également un QVariant utile si QJSManagedValue::isVariant() retourne false. QVariant peut contenir tous les types supportés par QJSManagedValue.

QJSManagedValue::Type QJSManagedValue::type() const

Renvoie le type JavaScript de cette QJSManagedValue.

QJSManagedValue &QJSManagedValue::operator=(QJSManagedValue &&other)

Move-assigns a QJSManagedValue from other. Cela laisse other dans l'état de construction par défaut où il représente undefined et n'appartient à aucun moteur.

Remarque : cette opération libère l'emplacement mémoire occupé par QJSManagedValue dans le tas JavaScript. Vous ne devez pas déplacer-assigner un QJSManagedValue sur un thread différent de celui où se trouve le QJSEngine auquel il appartient.

© 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.