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 オブジェクトの 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の操作方法は、スタック上にQJSManagedValueを作成し、QJSValue 、エンジンを追加し、必要な操作を行い、最後にQJSValue 、格納することです。QJSManagedValueとQJSValue 間の移動は高速である。
メンバ型ドキュメント
enum QJSManagedValue::Type
この列挙型は、ECMA-262 で規定されている JavaScript のネイティブ型を表します。
定数 | 値 | 説明 |
---|---|---|
QJSManagedValue::Undefined | 0 | undefined 型 |
QJSManagedValue::Boolean | 1 | boolean 型 |
QJSManagedValue::Number | 2 | number 型 |
QJSManagedValue::String | 3 | string タイプ |
QJSManagedValue::Object | 4 | object タイプ |
QJSManagedValue::Symbol | 5 | symbol タイプ |
QJSManagedValue::Function | 6 | function タイプ |
null
の値はそれ自体の型ではなく、特別な種類のオブジェクトであることに注意してください。isNull() メソッドを使えば、この条件に対してQJSManagedValue を問い合わせることができる。さらに、JavaScriptには整数型はありませんが、整数のみの演算に備え、数値の特別な扱いを知っています。isInteger() メソッドを使えば、QJSManagedValue に問い合わせて、そのような処理の結果を保持しているかどうかを調べることができる。
メンバ関数のドキュメント
[constexpr noexcept]
QJSManagedValue::QJSManagedValue()
JavaScriptundefined
の値を表す QJSManagedValue を作成します。これはJavaScriptのヒープに保存されていない唯一の値です。デフォルトで構築された QJSManagedValue でengine() を呼び出すと、nullptr が返されます。
QJSManagedValue::QJSManagedValue(QJSValue value, QJSEngine *engine)
engine のヒープを使用して、value から 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)
Move-constructed QJSManagedValue fromother. これにより、other は、未定義を表し、どのエンジンにも属さないデフォルトの構築状態になります。
[noexcept]
QJSManagedValue::~QJSManagedValue()
QJSManagedValue を破壊する。
注意: これはJavaScriptヒープ上のメモリスロットを解放します。QJSEngine が属しているスレッドとは異なるスレッドからQJSManagedValue を破棄してはいけません。
QJSValue QJSManagedValue::call(const QJSValueList &arguments = {}) const
このQJSManagedValue が JavaScript FunctionObject を表している場合、与えられたarguments で FunctionObject を呼び出し、その結果を返す。そうでない場合は、JavaScriptundefined
の値を返します。
arguments はプリミティブ値であるか、このQJSManagedValue と同じQJSEngine に属していなければならない。そうでない場合、呼び出しは実行されず、JavaScriptundefined
の値が返されます。
QJSValue QJSManagedValue::callAsConstructor(const QJSValueList &arguments = {}) const
このQJSManagedValue が JavaScript FunctionObject を表している場合、与えられたarguments でそれをコンストラクタとして呼び出し、その結果を返す。そうでない場合は、JavaScriptundefined
の値を返します。
arguments はプリミティブ値であるか、このQJSManagedValue と同じQJSEngine に属していなければなりません。そうでない場合、呼び出しは実行されず、JavaScriptundefined
の値が返されます。
QJSValue QJSManagedValue::callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const
このQJSManagedValue が JavaScript FunctionObject を表している場合、与えられたarguments でinstance を呼び出し、その結果を返す。そうでない場合は、JavaScriptundefined
の値を返します。
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
JavaScriptの'=='演算子をこのQJSManagedValue とother に対して実行し、結果を返します。
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エラーオブジェクトを表している場合はtrue
、そうでない場合はfalse
。
bool QJSManagedValue::isFunction() const
このQJSManagedValue の型がfunction
であればtrue
を、そうでなければfalse
を返す。
bool QJSManagedValue::isInteger() const
このQJSManagedValue が整数値を保持している場合はtrue
を、そうでない場合はfalse
を返す。数値の格納形式は、その数値に対して行われる操作の結果に影響しないが、整数が格納されている場合は、多くの操作が高速になる。
bool QJSManagedValue::isNull() const
このQJSManagedValue が JavaScriptnull
の値を保持している場合は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
の値から JavaScriptboolean
のプロトタイプを取得することができます。
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)
arrayIndex のvalue をこのQJSManagedValue に格納する。これは、JavaScriptのobject
型の値に対してのみ可能で、値が配列でない場合は推奨されません。さらに、value はプリミティブであるか、この値と同じエンジンに属していなければなりません。
void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)
このQJSManagedValue のプロトタイプをprototype に設定する。前提条件は、prototype がこのQJSManagedValue と同じQJSEngine に属し、オブジェクト(ヌルを含む)であることである。さらに、このQJSManagedValue もオブジェクト(ヌルを除く)でなければならず、プロトタイプのサイクルを作成することはできません。
prototype()も参照 。
bool QJSManagedValue::strictlyEquals(const QJSManagedValue &other) const
このQJSManagedValue とother に対して JavaScript の '===' 演算子を実行し、結果を返します。
equalsも参照してください 。
bool QJSManagedValue::toBoolean() const
管理値をブール値に変換する。管理値が真偽値を保持している場合は、その値が返されます。そうでない場合は、JavaScript のルールによる boolean の強制が実行されます。
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 を移動構築するよりも効率が悪いが、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)
Move-assign aQJSManagedValue fromother. これにより、other は未定義を表し、どのエンジンにも属さないデフォルト構築状態になります。
注意: これにより、このQJSManagedValue が JavaScript ヒープ上に保持するメモリ スロットが解放されます。QJSEngine が属しているスレッドとは異なるスレッドでQJSManagedValue を移動代入してはいけません。
© 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.