このページでは

QJSManagedValue Class

QJSManagedValue は、QJSEngine に属する JavaScript ヒープ上の値を表します。詳細...

ヘッダー: #include <QJSManagedValue>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
以下のように: Qt 6.1

パブリック型

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

パブリック関数

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)

詳細な説明

QJSManagedValue クラスを使用すると、JavaScript 自体から行うことができるほとんどの方法で、JavaScript 値とやり取りすることができます。プロパティやプロトタイプを取得・設定したり、配列にアクセスしたりできます。さらに、その値を JavaScript オブジェクトに対応する Qt オブジェクトに変換することも可能です。たとえば、Url オブジェクトをQUrl に変換することができます。

QJSManagedValueは常に特定のQJSEngine にバインドされています。単独で使用することはできません。つまり、あるエンジンからのQJSManagedValueを、別のエンジンからのQJSManagedValueのプロパティやプロトタイプとして使用することはできません。

QJSValue とは対照的に、QJSManagedValueが保持する値のほとんどはJavaScriptヒープ上に存在します。インラインストレージや非管理ストレージは存在しません。したがって、プリミティブ値のプロトタイプを取得したり、文字列のlength プロパティを取得したりすることができます。

デフォルトで生成された、または他の場所から移動された QJSManagedValue のみが、JavaScript ヒープ上に値を保持しません。これらは、プロパティやプロトタイプを持たない `undefined` を表しています。

また、QJSValue とは対照的に、QJSManagedValueはJavaScriptの例外をキャッチしません。QJSManagedValueに対する操作でエラーが発生した場合、通常はundefined 値を返し、その後QJSEngine::hasError()はtrue を返します。その後、QJSEngine::catchError()を使用して例外をキャッチするか、あるいはご自身の判断でスタックを遡って例外を伝播させることができます。

注: JavaScriptヒープ上の値への参照は破棄時に解放される必要があるため 、QJSManagedValueを別のスレッドに移動することはできません。 破棄処理は新しいスレッドで行われるため、元のスレッド上のガベージコレクタとの間で競合状態が発生してしまいます。これはまた、QJSManagedValue をそのエンジンのライフサイクルを超えて保持することはできないことを意味します。

QJSManagedValue を使用する際の推奨される方法は、スタック上で作成し(QJSValue を移動してエンジンを追加する方法など)、必要な操作を行った後、最後に保存のためにQJSValue に戻すことです。QJSManagedValue とQJSValue 間の移動は高速です。

メンバ型のドキュメント

enum QJSManagedValue::Type

この列挙型は、ECMA-262で規定されているJavaScriptのネイティブ型を表します。

定数値説明
QJSManagedValue::Undefined0undefined 型
QJSManagedValue::Boolean1boolean 型
QJSManagedValue::Number2number 型
QJSManagedValue::String3string 型
QJSManagedValue::Object4object 型
QJSManagedValue::Symbol5symbol 型
QJSManagedValue::Function6function 型

なお、null の値はそれ自体が型ではなく、特殊な種類のオブジェクトであることに注意してください。この条件についてQJSManagedValue を照会するには、isNull()メソッドを使用します。さらに、JavaScriptには整数型はありませんが、整数のみの演算に備えて、数値に対する特別な処理が定義されています。QJSManagedValue がそのような処理の結果を保持しているかどうかは、isInteger() メソッドを使用して確認できます。

メンバ関数のドキュメント

[constexpr noexcept default] QJSManagedValue::QJSManagedValue()

JavaScriptのundefined 値を表すQJSManagedValueを作成します。これは、JavaScriptのヒープ上に格納されない唯一の値です。デフォルト構築されたQJSManagedValueに対してengine()を呼び出すと、nullptrが返されます。

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

value から、engine のヒープを使用して QJSManagedValue を作成します。value 自体が管理対象であり、かつそれが属するエンジンがengine でない場合、結果はundefined 値となり、警告が発生します。

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

engine のヒープを使用して、value からQJSManagedValueを作成します。

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

engine のヒープを使用して、string からQJSManagedValueを作成します。

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

engine のヒープを使用して、variant からQJSManagedValueを作成します。

QJSManagedValue::QJSManagedValue(QJSManagedValue &&other)

other から QJSManagedValue をムーブコンストラクトで生成します。これにより、other はデフォルトコンストラクトされた状態のままとなり、この状態では undefined を表し、どのエンジンにも属しません。

[noexcept] QJSManagedValue::~QJSManagedValue()

QJSManagedValue を破棄します。

注:これにより 、JavaScript ヒープ上でそのオブジェクトが占有していたメモリスロットが解放されます。QJSManagedValue は、それが属する `QJSEngine ` が存在するスレッドとは異なるスレッドから破棄してはなりません。

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

このQJSManagedValue がJavaScriptのFunctionObjectを表している場合、指定されたarguments を引数として呼び出し、その結果を返します。そうでない場合は、JavaScriptのundefined 値を返します。

arguments は、プリミティブ値であるか、またはこのQJSManagedValue と同じQJSEngine に属している必要があります。そうでない場合、呼び出しは実行されず、JavaScriptのundefined 値が返されます。

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

この `QJSManagedValue ` が JavaScript の `FunctionObject` を表す場合、指定された `arguments` を引数としてコンストラクタを呼び出し、その結果を返します。それ以外の場合は、JavaScript の `undefined ` 値を返します。

arguments は、プリミティブ値であるか、このQJSManagedValue と同じQJSEngine に属している必要があります。そうでない場合、呼び出しは実行されず、JavaScript のundefined 値が返されます。

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

この `QJSManagedValue ` が JavaScript の `FunctionObject` を表している場合、指定された `arguments` を用いて `instance ` でそれを呼び出し、その結果を返します。そうでない場合は、JavaScript の `undefined ` 値を返します。

arguments とinstance は、プリミティブ値であるか、このQJSManagedValue と同じQJSEngine に属している必要があります。そうでない場合、呼び出しは実行されず、JavaScript のundefined 値が返されます。

bool QJSManagedValue::deleteProperty(const QString &name)

この `QJSManagedValue` から `name ` プロパティを削除します。削除に成功した場合は `true ` を返し、失敗した場合は `false ` を返します。

bool QJSManagedValue::deleteProperty(quint32 arrayIndex)

このQJSManagedValue から、arrayIndex に格納されている値を削除します。削除に成功した場合はtrue を返し、失敗した場合はfalse を返します。

QJSEngine *QJSManagedValue::engine() const

この `QJSManagedValue ` が属する `QJSEngine ` を返します。QJSManagedValue がデフォルトコンストラクタで生成された場合、または移動された場合を除き、エンジンは常に有効であることに注意してください。後者の場合、`nullptr` が返されます。

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

このQJSManagedValue およびother に対してJavaScriptの「==」演算子を適用し、その結果を返します。

strictlyEqualsも参照してください 。

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

この `QJSManagedValue ` に `name` プロパティが存在する場合、true を返します。そうでない場合は、false を返します。プロトタイプチェーンのプロパティは考慮されません。

bool QJSManagedValue::hasOwnProperty(quint32 arrayIndex) const

この `QJSManagedValue ` に配列インデックス `arrayIndex` が存在する場合は `true ` を返し、そうでない場合は `false` を返します。プロトタイプチェーンのプロパティは考慮されません。

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

この `QJSManagedValue ` に `name` プロパティがある場合は `true ` を返し、そうでない場合は `false` を返します。プロトタイプチェーンのプロパティも考慮されます。

bool QJSManagedValue::hasProperty(quint32 arrayIndex) const

この `QJSManagedValue ` に配列インデックス `arrayIndex` が存在する場合、true を返します。そうでない場合は、false を返します。プロトタイプチェーンのプロパティも考慮されます。

bool QJSManagedValue::isArray() const

この値が JavaScript の Array オブジェクトを表す場合は `true ` を返し、それ以外の場合は `false ` を返します。

bool QJSManagedValue::isBoolean() const

このQJSManagedValue の型がboolean である場合はtrue を返し、それ以外の場合はfalse を返します。

bool QJSManagedValue::isDate() const

この値が JavaScript の Date オブジェクトを表す場合は `true ` を返し、それ以外の場合は `false ` を返します。

bool QJSManagedValue::isError() const

この値が JavaScript の Error オブジェクトを表す場合は `true ` を返し、それ以外の場合は `false ` を返します。

bool QJSManagedValue::isFunction() const

このQJSManagedValue の型がfunction の場合、true を返し、それ以外の場合はfalse を返します。

bool QJSManagedValue::isInteger() const

このQJSManagedValue が整数値を保持している場合はtrue を返し、そうでない場合はfalse を返します。数値の格納形式は、その数値に対して行われる演算の結果には影響しませんが、整数が格納されている場合、多くの演算が高速になります。

bool QJSManagedValue::isNull() const

この `QJSManagedValue ` が JavaScript の `null ` 値を保持している場合は `true ` を返し、そうでない場合は `false ` を返します。

bool QJSManagedValue::isNumber() const

このQJSManagedValue の型がnumber である場合はtrue を返し、それ以外の場合はfalse を返します。

bool QJSManagedValue::isObject() const

このQJSManagedValue の型がobject である場合はtrue を返し、それ以外の場合はfalse を返します。

bool QJSManagedValue::isQMetaObject() const

この値が、JavaScript ヒープ上で管理されている `QMetaObject ` ポインタを表す場合は `true ` を返し、それ以外の場合は `false ` を返します。

bool QJSManagedValue::isQObject() const

この値がJavaScriptヒープ上で管理されているQObject ポインタを表す場合はtrue を返し、それ以外の場合はfalse を返します。

bool QJSManagedValue::isRegularExpression() const

この値が JavaScript の正規表現オブジェクトを表す場合は `true ` を返し、それ以外の場合は `false ` を返します。

bool QJSManagedValue::isString() const

このQJSManagedValue の型がstring である場合はtrue を返し、それ以外の場合はfalse を返します。

bool QJSManagedValue::isSymbol() const

このQJSManagedValue の型がsymbol である場合はtrue を返し、それ以外の場合はfalse を返します。

bool QJSManagedValue::isUndefined() const

このQJSManagedValue の型がundefined である場合はtrue を返し、それ以外の場合はfalse を返します。

bool QJSManagedValue::isUrl() const

この値が JavaScript の Url オブジェクトを表す場合は `true ` を返し、それ以外の場合は `false ` を返します。

bool QJSManagedValue::isVariant() const

この値がJavaScriptヒープ上で管理されているQVariant を表す場合はtrue を返し、それ以外の場合はfalse を返します。

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

この `QJSManagedValue` のプロパティ `name ` を返します。実際のオブジェクトにこのプロパティが見つからない場合は、プロトタイプチェーンが検索されます。

setProperty()も参照してください 。

QJSValue QJSManagedValue::property(quint32 arrayIndex) const

この `QJSManagedValue` の `arrayIndex ` に格納されているプロパティを返します。実際のオブジェクト上でそのプロパティが見つからない場合は、プロトタイプチェーンが検索されます。

QJSManagedValue QJSManagedValue::prototype() const

この `QJSManagedValue` のプロトタイプを返します。これはどのような値に対しても機能します。たとえば、boolean の値から JavaScript の `boolean ` プロトタイプを取得することができます。

setPrototype()も参照してください 。

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

この `QJSManagedValue` に対して、プロパティ `name ` の値を `value ` に設定します。これは、型が `object` の JavaScript 値に対してのみ実行可能です。さらに、`value ` はプリミティブ型であるか、この値と同じエンジンに属している必要があります。

property()も参照してください 。

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

value を、arrayIndex にあるQJSManagedValue に格納します。これは、object 型のJavaScript値に対してのみ実行可能であり、値が配列でない場合は推奨されません。さらに、value はプリミティブ型であるか、この値と同じエンジンに属している必要があります。

void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)

この `QJSManagedValue ` のプロトタイプを `prototype` に設定します。前提条件として、`prototype ` は、この `QJSManagedValue ` と同じ `QJSEngine ` に属し、かつオブジェクト(nullを含む)である必要があります。さらに、この `QJSManagedValue ` もオブジェクト(nullを除く)である必要があり、プロトタイプループを生成することはできません。

prototype()も参照してください 。

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

このQJSManagedValue およびother に対してJavaScriptの「===」演算子を適用し、その結果を返します。

equalsも参照してください 。

bool QJSManagedValue::toBoolean() const

マネージド値をブール値に変換します。マネージド値がブール値である場合は、その値が返されます。そうでない場合は、JavaScriptの規則に基づいてブール値への型変換が行われます。

QDateTime QJSManagedValue::toDateTime() const

この `QJSManagedValue ` が JavaScript の `Date` オブジェクトを保持している場合、同等の `QDateTime` を返します。そうでない場合は、無効な ` ` を返します。

int QJSManagedValue::toInteger() const

管理された値を整数に変換します。まず、toNumber() のルールに従って値を数値に変換し、次に、JavaScript のビットシフト演算子の引数を 32 ビット整数に型変換する際のルールに従って、その値を整数の範囲内にクリップします。

内部的には、値がすでに整数として格納されている場合があり、その場合は高速処理パスが実行されます。

注: マネージド値を数値に変換する際に 、例外が発生する可能性があります。特に、シンボルは数値に変換できないため、カスタム `valueOf()` メソッドが例外をスローする可能性があります。この場合、結果は 0 となり、変換後にエンジンにエラーが残ります。

注: 数値を 32 ビット整数に変換するための JavaScriptの ルールは 、直感に反しています。

QJSValue QJSManagedValue::toJSValue() const

QJSManagedValue を新しいQJSValue にコピーします。これは、QJSManagedValue からQJSValue をmoveコンストラクタで生成するよりも効率は劣りますが、QJSManagedValue は維持されます。

double QJSManagedValue::toNumber() const

管理対象の値を数値に変換します。管理対象の値が数値である場合は、その値が返されます。そうでない場合は、JavaScript の規則に従って数値への型変換が行われます。

注: マネージド値を数値に変換する際 、例外が発生する可能性があります。特に、シンボルは数値に変換できないため、カスタム `valueOf()` メソッドが例外をスローする可能性があります。この場合、結果は 0 となり、変換後にエンジンにエラーが残ります。

QJSPrimitiveValue QJSManagedValue::toPrimitive() const

マネージド値をQJSPrimitiveValue に変換します。マネージド値がQJSPrimitiveValue でサポートされている型である場合、その値がコピーされます。それ以外の場合は、値が文字列に変換され、その文字列がQJSPrimitiveValue に格納されます。

注: マネージド値を文字列に変換する際 、例外が発生する可能性があります。特に、シンボルは文字列に変換できないため、カスタムtoString()メソッドが例外をスローする可能性があります。この場合、結果は未定義の値となり、エンジンは変換後にエラーを保持します。

const QMetaObject *QJSManagedValue::toQMetaObject() const

QJSManagedValue がQMetaObject へのポインタを保持している場合、それを返します。そうでない場合は nullptr を返します。

QObject *QJSManagedValue::toQObject() const

QJSManagedValue がQObject へのポインタを保持している場合は、それを返します。そうでない場合は nullptr を返します。

QRegularExpression QJSManagedValue::toRegularExpression() const

この `QJSManagedValue ` が JavaScript の正規表現オブジェクトを保持している場合、同等の `QRegularExpression` を返します。そうでない場合は、無効な ` ` を返します。

QString QJSManagedValue::toString() const

管理対象の値を文字列に変換します。管理対象の値が文字列である場合は、その文字列が返されます。そうでない場合は、JavaScriptのルールに基づいて文字列への型変換が行われます。

注: マネージド値を文字列に変換する際 、例外が発生する可能性があります。特に、シンボルは文字列に変換できないほか、カスタム toString() メソッドが例外をスローする場合があります。この場合、結果は空の文字列となり、変換後にエンジンがエラーを保持します。

QUrl QJSManagedValue::toUrl() const

この `QJSManagedValue ` が JavaScript の `URL` オブジェクトを保持している場合、同等の `QUrl` を返します。そうでない場合は、無効な ` ` を返します。

QVariant QJSManagedValue::toVariant() const

QJSManagedValue を新しいQVariant にコピーします。また、QJSManagedValue::isVariant() が false を返した場合、便利なQVariant も作成されます。QVariant は、QJSManagedValue でサポートされているすべての型を格納できます。

QJSManagedValue::Type QJSManagedValue::type() const

この `QJSManagedValue` の JavaScript 型を返します。

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

other からQJSManagedValue を移動代入します。これにより、other はデフォルト構築された状態のままとなり、これは undefined を表し、どのエンジンにも属しません。

注:これにより、 この `QJSManagedValue ` が JavaScript ヒープ上で占有していたメモリ領域が解放されます。`QJSEngine ` が存在するスレッドとは異なるスレッド上で、`QJSManagedValue ` を移動代入してはなりません。

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