QJSManagedValue Class

QJSManagedValue stellt einen Wert auf dem JavaScript-Heap dar, der zu einem QJSEngine gehört. Mehr...

Kopfzeile: #include <QJSManagedValue>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
Seit: Qt 6.1

Öffentliche Typen

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

Öffentliche Funktionen

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)

Detaillierte Beschreibung

Die Klasse QJSManagedValue ermöglicht die Interaktion mit JavaScript-Werten auf die meisten Arten, die Sie in JavaScript selbst nutzen können. Sie können Eigenschaften und Prototypen abrufen und setzen, und Sie können auf Arrays zugreifen. Außerdem können Sie den Wert in die Qt-Gegenstücke von JavaScript-Objekten umwandeln. Zum Beispiel kann ein Url-Objekt in ein QUrl umgewandelt werden.

Ein QJSManagedValue ist immer an ein bestimmtes QJSEngine gebunden. Sie können ihn nicht unabhängig verwenden. Das bedeutet, dass ein QJSManagedValue einer Engine keine Eigenschaft oder ein Proptotyp eines QJSManagedValue einer anderen Engine sein kann.

Im Gegensatz zu QJSValue befinden sich fast alle von QJSManagedValue gehaltenen Werte auf dem JavaScript-Heap. Es gibt keine inline oder unmanaged Speicherung. Daher können Sie den Prototyp eines primitiven Wertes und die Eigenschaft length eines Strings abrufen.

Nur standardmäßig konstruierte oder aus QJSManagedValues verschobene Werte haben keinen Wert auf dem JavaScript-Heap. Sie repräsentieren undefined, das keine Eigenschaften oder Prototypen hat.

Ebenfalls im Gegensatz zu QJSValue fängt QJSManagedValue keine JavaScript-Ausnahmen ab. Wenn eine Operation auf einem QJSManagedValue einen Fehler verursacht, wird in der Regel ein undefined Wert zurückgegeben und QJSEngine::hasError() gibt anschließend true zurück. Sie können dann die Ausnahme mit QJSEngine::catchError() abfangen oder sie nach eigenem Ermessen auf dem Stack weitergeben.

Hinweis: Da der Verweis auf den Wert auf dem JavaScript-Heap bei der Zerstörung freigegeben werden muss, können Sie einen QJSManagedValue nicht in einen anderen Thread verschieben. Die Zerstörung würde in dem neuen Thread stattfinden, was zu einer Wettlaufsituation mit dem Garbage Collector auf dem ursprünglichen Thread führen würde. Dies bedeutet auch, dass Sie einen QJSManagedValue nicht über die Lebensdauer seiner Engine hinaus halten können.

Der empfohlene Weg, mit einem QJSManagedValue zu arbeiten, besteht darin, ihn auf dem Stack zu erstellen, möglicherweise durch Verschieben eines QJSValue und Hinzufügen einer Engine, dann die notwendigen Operationen mit ihm durchzuführen und ihn schließlich zur Speicherung zurück in ein QJSValue zu verschieben. Das Verschieben zwischen QJSManagedValue und QJSValue ist schnell.

Dokumentation der Mitgliedstypen

enum QJSManagedValue::Type

Diese Aufzählung stellt die nativen JavaScript-Typen dar, wie sie in ECMA-262 spezifiziert sind.

KonstanteWertBeschreibung
QJSManagedValue::Undefined0Der Typ undefined
QJSManagedValue::Boolean1Der Typ boolean
QJSManagedValue::Number2Der Typ number
QJSManagedValue::String3Der Typ string
QJSManagedValue::Object4Der Typ object
QJSManagedValue::Symbol5Der Typ symbol
QJSManagedValue::Function6Der function Typ

Beachten Sie, dass der Wert null kein Typ an sich ist, sondern eine besondere Art von Objekt. Mit der Methode isNull() können Sie ein QJSManagedValue für diese Bedingung abfragen. Außerdem hat JavaScript keinen Integer-Typ, aber es kennt eine spezielle Behandlung von Zahlen in Vorbereitung auf Integer-Operationen. Mit der Methode isInteger() können Sie eine QJSManagedValue abfragen, um herauszufinden, ob sie das Ergebnis einer solchen Behandlung enthält.

Dokumentation der Mitgliedsfunktionen

[constexpr noexcept] QJSManagedValue::QJSManagedValue()

Erzeugt einen QJSManagedValue, der den JavaScript-Wert undefined darstellt. Dies ist der einzige Wert, der nicht auf dem JavaScript-Heap gespeichert wird. Der Aufruf von engine() für einen standardmäßig erstellten QJSManagedValue gibt nullptr zurück.

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

Erzeugt einen QJSManagedValue aus value unter Verwendung des Heaps von engine. Wenn value selbst verwaltet wird und die Engine, zu der er gehört, nicht engine ist, ist das Ergebnis ein undefined -Wert, und es wird eine Warnung erzeugt.

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

Erzeugt einen QJSManagedValue aus value unter Verwendung des Heaps von engine.

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

Erzeugt einen QJSManagedValue aus string unter Verwendung des Heaps von engine.

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

Erzeugt einen QJSManagedValue aus variant unter Verwendung des Heaps von engine.

QJSManagedValue::QJSManagedValue(QJSManagedValue &&other)

Move-konstruiert einen QJSManagedValue aus other. Dadurch bleibt other im standardmäßig konstruierten Zustand, in dem er undefiniert ist und zu keiner Engine gehört.

[noexcept] QJSManagedValue::~QJSManagedValue()

Zerstört die QJSManagedValue.

Hinweis: Dadurch wird der Speicherplatz auf dem JavaScript-Heap freigegeben, den er belegt. Sie dürfen eine QJSManagedValue nicht von einem anderen Thread aus zerstören als dem, in dem sich die QJSEngine befindet, zu der sie gehört.

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

Wenn dieses QJSManagedValue ein JavaScript FunctionObject darstellt, ruft es dieses mit dem angegebenen arguments auf und gibt das Ergebnis zurück. Andernfalls wird ein JavaScript undefined Wert zurückgegeben.

Die arguments müssen entweder primitive Werte sein oder zum selben QJSEngine gehören wie dieses QJSManagedValue. Andernfalls wird der Aufruf nicht ausgeführt und ein JavaScript undefined Wert zurückgegeben.

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

Wenn dieses QJSManagedValue ein JavaScript FunctionObject darstellt, ruft es als Konstruktor mit dem angegebenen arguments auf und gibt das Ergebnis zurück. Andernfalls wird ein JavaScript undefined Wert zurückgegeben.

Die arguments müssen entweder primitive Werte sein oder zum selben QJSEngine gehören wie dieses QJSManagedValue. Andernfalls wird der Aufruf nicht ausgeführt und ein JavaScript undefined Wert zurückgegeben.

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

Wenn dieses QJSManagedValue ein JavaScript FunctionObject darstellt, ruft es instance mit dem angegebenen arguments auf und gibt das Ergebnis zurück. Andernfalls wird ein JavaScript undefined Wert zurückgegeben.

Die arguments und die instance müssen entweder primitive Werte sein oder zum selben QJSEngine gehören wie diese QJSManagedValue. Andernfalls wird der Aufruf nicht ausgeführt und ein JavaScript undefined Wert zurückgegeben.

bool QJSManagedValue::deleteProperty(const QString &name)

Löscht die Eigenschaft name aus dieser QJSManagedValue. Gibt true zurück, wenn die Löschung erfolgreich war, andernfalls false.

bool QJSManagedValue::deleteProperty(quint32 arrayIndex)

Löscht den unter arrayIndex gespeicherten Wert aus dieser QJSManagedValue. Gibt true zurück, wenn die Löschung erfolgreich war, andernfalls false.

QJSEngine *QJSManagedValue::engine() const

Gibt die QJSEngine zurück, zu der diese QJSManagedValue gehört. Beachten Sie, dass die Engine immer gültig ist, es sei denn, die QJSManagedValue ist standardmäßig konstruiert oder wurde verschoben. In letzterem Fall wird eine nullptr zurückgegeben.

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

Ruft den JavaScript-Operator '==' auf dieser QJSManagedValue und other auf und gibt das Ergebnis zurück.

Siehe auch strictlyEquals.

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

Gibt true zurück, wenn diese QJSManagedValue eine Eigenschaft name hat, ansonsten false. Die Eigenschaften der Prototypenkette werden nicht berücksichtigt.

bool QJSManagedValue::hasOwnProperty(quint32 arrayIndex) const

Gibt true zurück, wenn dieses QJSManagedValue einen Array-Index arrayIndex hat, andernfalls false. Die Eigenschaften der Prototypenkette werden nicht berücksichtigt.

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

Gibt true zurück, wenn diese QJSManagedValue eine Eigenschaft name hat, ansonsten false. Die Eigenschaften der Prototypenkette werden berücksichtigt.

bool QJSManagedValue::hasProperty(quint32 arrayIndex) const

Gibt true zurück, wenn dieses QJSManagedValue einen Array-Index arrayIndex hat, andernfalls false. Die Eigenschaften der Prototypenkette werden berücksichtigt.

bool QJSManagedValue::isArray() const

Gibt true zurück, wenn dieser Wert ein JavaScript-Array-Objekt darstellt, andernfalls false.

bool QJSManagedValue::isBoolean() const

Gibt true zurück, wenn der Typ dieser QJSManagedValue boolean ist, andernfalls false.

bool QJSManagedValue::isDate() const

Gibt true zurück, wenn dieser Wert ein JavaScript-Date-Objekt darstellt, oder andernfalls false.

bool QJSManagedValue::isError() const

Gibt true zurück, wenn dieser Wert ein JavaScript-Fehlerobjekt darstellt, andernfalls false.

bool QJSManagedValue::isFunction() const

Gibt true zurück, wenn der Typ dieser QJSManagedValue function ist, andernfalls false.

bool QJSManagedValue::isInteger() const

Gibt true zurück, wenn diese QJSManagedValue einen Integer-Wert enthält, andernfalls false. Das Speicherformat einer Zahl hat keinen Einfluss auf das Ergebnis der mit ihr durchgeführten Operationen, aber wenn eine ganze Zahl gespeichert wird, sind viele Operationen schneller.

bool QJSManagedValue::isNull() const

Gibt true zurück, wenn diese QJSManagedValue den JavaScript-Wert null enthält, oder andernfalls false.

bool QJSManagedValue::isNumber() const

Gibt true zurück, wenn der Typ dieser QJSManagedValue number ist, andernfalls false.

bool QJSManagedValue::isObject() const

Gibt true zurück, wenn der Typ dieser QJSManagedValue object ist, andernfalls false.

bool QJSManagedValue::isQMetaObject() const

Gibt true zurück, wenn dieser Wert einen QMetaObject -Zeiger darstellt, der auf dem JavaScript-Heap verwaltet wird, oder andernfalls false.

bool QJSManagedValue::isQObject() const

Gibt true zurück, wenn dieser Wert einen QObject -Zeiger darstellt, der auf dem JavaScript-Heap verwaltet wird, oder andernfalls false.

bool QJSManagedValue::isRegularExpression() const

Gibt true zurück, wenn dieser Wert ein JavaScript-Objekt für reguläre Ausdrücke darstellt, andernfalls false.

bool QJSManagedValue::isString() const

Gibt true zurück, wenn der Typ dieser QJSManagedValue string ist, andernfalls false.

bool QJSManagedValue::isSymbol() const

Gibt true zurück, wenn der Typ dieser QJSManagedValue symbol ist, andernfalls false.

bool QJSManagedValue::isUndefined() const

Gibt true zurück, wenn der Typ dieser QJSManagedValue undefined ist, andernfalls false.

bool QJSManagedValue::isUrl() const

Gibt true zurück, wenn dieser Wert ein JavaScript-Url-Objekt darstellt, andernfalls false.

bool QJSManagedValue::isVariant() const

Gibt true zurück, wenn dieser Wert eine auf dem JavaScript-Heap verwaltete QVariant darstellt, oder andernfalls false.

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

Gibt die Eigenschaft name dieser QJSManagedValue zurück. Die Prototypenkette wird durchsucht, wenn die Eigenschaft auf dem aktuellen Objekt nicht gefunden wird.

Siehe auch setProperty().

QJSValue QJSManagedValue::property(quint32 arrayIndex) const

Gibt die Eigenschaft zurück, die unter arrayIndex dieser QJSManagedValue gespeichert ist. Die Prototypenkette wird durchsucht, wenn die Eigenschaft auf dem eigentlichen Objekt nicht gefunden wird.

QJSManagedValue QJSManagedValue::prototype() const

Gibt den Prototyp für diesen QJSManagedValue zurück. Dies funktioniert mit jedem Wert. Sie können z. B. den JavaScript-Prototyp boolean von einem Wert boolean abrufen.

Siehe auch setPrototype().

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

Setzt die Eigenschaft name auf value auf diesem QJSManagedValue. Dies ist nur bei JavaScript-Werten des Typs object möglich. Außerdem muss value entweder ein Primitivwert sein oder zur selben Engine gehören wie dieser Wert.

Siehe auch property().

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

Speichert den value unter arrayIndex in diesem QJSManagedValue. Dies ist nur bei JavaScript-Werten vom Typ object möglich und wird nicht empfohlen, wenn es sich bei dem Wert nicht um ein Array handelt. Außerdem muss value entweder ein Primitivwert sein oder zur selben Engine gehören wie dieser Wert.

void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)

Setzt den Prototyp dieses QJSManagedValue auf prototype. Voraussetzung ist, dass prototype zum selben QJSEngine gehört wie dieses QJSManagedValue und ein Objekt ist (einschließlich null). Außerdem muss dieses QJSManagedValue ebenfalls ein Objekt (außer null) sein, und Sie können keine Prototyp-Zyklen erzeugen.

Siehe auch prototype().

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

Ruft den JavaScript-Operator '===' auf dieser QJSManagedValue und other auf und gibt das Ergebnis zurück.

Siehe auch equals.

bool QJSManagedValue::toBoolean() const

Konvertiert den verwalteten Wert in einen booleschen Wert. Wenn der verwaltete Wert einen Booleschen Wert enthält, wird dieser zurückgegeben. Andernfalls wird eine boolesche Konvertierung nach JavaScript-Regeln durchgeführt.

QDateTime QJSManagedValue::toDateTime() const

Wenn diese QJSManagedValue ein JavaScript-Date-Objekt enthält, wird ein entsprechendes QDateTime zurückgegeben. Andernfalls wird ein ungültiges Objekt zurückgegeben.

int QJSManagedValue::toInteger() const

Konvertiert den manipulierten Wert in eine Ganzzahl. Dabei wird der Wert zunächst nach den Regeln von toNumber() in eine Zahl umgewandelt und dann nach den Regeln, die für die Umwandlung der Argumente von JavaScript-Bit-Shift-Operatoren in 32-Bit-Ganzzahlen gelten, in den Ganzzahlbereich geklemmt.

Intern kann der Wert bereits als Integer gespeichert sein, in diesem Fall wird ein schneller Weg gewählt.

Hinweis: Die Umwandlung eines verwalteten Wertes in eine Zahl kann eine Ausnahme auslösen. Insbesondere können Symbole nicht in Zahlen umgewandelt werden, oder eine benutzerdefinierte valueOf()-Methode kann einen Fehler verursachen. In diesem Fall ist das Ergebnis 0 und die Engine gibt nach der Umwandlung einen Fehler aus.

Hinweis: Die JavaScript-Regeln für die Umwandlung von Zahlen in 32-Bit-Ganzzahlen sind nicht intuitiv.

QJSValue QJSManagedValue::toJSValue() const

Kopiert diese QJSManagedValue in eine neue QJSValue. Dies ist weniger effizient als das Verschieben und Erstellen eines QJSValue aus einem QJSManagedValue, aber die QJSManagedValue bleibt erhalten.

double QJSManagedValue::toNumber() const

Wandelt den verwalteten Wert in eine Zahl um. Wenn der verwaltete Wert eine Zahl enthält, wird diese zurückgegeben. Andernfalls wird eine Zahlenkonvertierung nach JavaScript-Regeln durchgeführt.

Hinweis: Die Umwandlung eines verwalteten Wertes in eine Zahl kann eine Ausnahme auslösen. Insbesondere können Symbole nicht in Zahlen umgewandelt werden, oder eine benutzerdefinierte valueOf()-Methode kann einen Fehler verursachen. In diesem Fall ist das Ergebnis 0 und die Engine gibt nach der Umwandlung einen Fehler aus.

QJSPrimitiveValue QJSManagedValue::toPrimitive() const

Konvertiert den verwalteten Wert in eine QJSPrimitiveValue. Wenn der verwaltete Wert einen von QJSPrimitiveValue unterstützten Typ enthält, wird der Wert kopiert. Andernfalls wird der Wert in eine Zeichenkette konvertiert, und die Zeichenkette wird in QJSPrimitiveValue gespeichert.

Hinweis: Die Konvertierung eines verwalteten Wertes in eine Zeichenkette kann eine Ausnahme auslösen. Insbesondere können Symbole nicht in Strings umgewandelt werden, oder eine benutzerdefinierte toString()-Methode kann eine Ausnahme auslösen. In diesem Fall ist das Ergebnis ein undefinierter Wert und die Engine gibt nach der Konvertierung einen Fehler aus.

const QMetaObject *QJSManagedValue::toQMetaObject() const

Wenn diese QJSManagedValue einen Zeiger auf QMetaObject enthält, wird dieser zurückgegeben. Andernfalls wird nullptr zurückgegeben.

QObject *QJSManagedValue::toQObject() const

Wenn diese QJSManagedValue einen Zeiger auf QObject enthält, wird dieser zurückgegeben. Andernfalls wird nullptr zurückgegeben.

QRegularExpression QJSManagedValue::toRegularExpression() const

Wenn diese QJSManagedValue ein JavaScript-Objekt für reguläre Ausdrücke enthält, wird ein entsprechendes QRegularExpression zurückgegeben. Andernfalls wird ein ungültiger Ausdruck zurückgegeben.

QString QJSManagedValue::toString() const

Konvertiert den verwalteten Wert in eine Zeichenkette. Wenn der verwaltete Wert eine Zeichenkette enthält, wird diese zurückgegeben. Andernfalls wird eine String-Konvertierung nach JavaScript-Regeln durchgeführt.

Hinweis: Die Konvertierung eines verwalteten Wertes in eine Zeichenkette kann eine Ausnahme auslösen. Insbesondere können Symbole nicht in Strings umgewandelt werden, oder eine benutzerdefinierte toString()-Methode kann zu einem Fehler führen. In diesem Fall ist das Ergebnis eine leere Zeichenkette und die Engine gibt nach der Umwandlung einen Fehler aus.

QUrl QJSManagedValue::toUrl() const

Wenn diese QJSManagedValue ein JavaScript-Url-Objekt enthält, wird ein entsprechendes QUrl zurückgegeben. Andernfalls wird ein ungültiges Objekt zurückgegeben.

QVariant QJSManagedValue::toVariant() const

Kopiert diese QJSManagedValue in eine neue QVariant. Dies erzeugt auch ein nützliches QVariant, wenn QJSManagedValue::isVariant() false zurückgibt. QVariant kann alle von QJSManagedValue unterstützten Typen enthalten.

QJSManagedValue::Type QJSManagedValue::type() const

Gibt den JavaScript-Typ dieses QJSManagedValue zurück.

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

Move-zuweist ein QJSManagedValue von other. Dies lässt other im standardmäßig konstruierten Zustand, in dem es undefiniert ist und zu keiner Engine gehört.

Hinweis: Dies gibt den Speicherplatz frei, den QJSManagedValue auf dem JavaScript-Heap belegt. Sie dürfen eine QJSManagedValue nicht auf einen anderen Thread verschieben als den, auf dem die QJSEngine, zu der sie gehört, lebt.

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