QJSManagedValue Class
QJSManagedValue は、QJSEngine に属する JavaScript ヒープ上の値を表します。 ... 詳細
Header: | #include <QJSManagedValue> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
Since: | 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の操作方法は、スタック上に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)
other から QJSManagedValue を移動構築します。 これにより、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 に属していなければならない。そうでない場合、呼び出しは実行されず、JavaScriptundefined
値が返される。
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
の値から 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 に格納します。これはobject
型の JavaScript 値に対してのみ可能で、値が配列でない場合は推奨されません。さらに、value はプリミティブであるか、この値と同じエンジンに属していなければなりません。
void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)
このQJSManagedValue のプロトタイプをprototype に設定します。前提条件は、prototype がこのQJSManagedValue と同じQJSEngine に属し、オブジェクト(NULL を含む)であることです。さらに、この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 をムーブアサインしてはいけません。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。