QJSValue Class
QJSValueクラスは、Qt/JavaScriptデータ型のコンテナとして動作します。詳細...
ヘッダー | #include <QJSValue> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
パブリックな型
enum | ErrorType { GenericError, RangeError, ReferenceError, SyntaxError, TypeError, URIError } |
enum | ObjectConversionBehavior { ConvertJSObjects, RetainJSObjects } |
enum | SpecialValue { UndefinedValue, NullValue } |
パブリック関数
QJSValue(QJSValue::SpecialValue value = UndefinedValue) | |
QJSValue(bool value) | |
QJSValue(const QLatin1String &value) | |
QJSValue(const QString &value) | |
QJSValue(const char *value) | |
QJSValue(double value) | |
QJSValue(int value) | |
QJSValue(uint value) | |
QJSValue(const QJSValue &other) | |
QJSValue(QJSValue &&other) | |
~QJSValue() | |
QJSValue | call(const QJSValueList &args = QJSValueList()) const |
QJSValue | callAsConstructor(const QJSValueList &args = QJSValueList()) const |
QJSValue | callWithInstance(const QJSValue &instance, const QJSValueList &args = QJSValueList()) const |
bool | deleteProperty(const QString &name) |
bool | equals(const QJSValue &other) const |
QJSValue::ErrorType | errorType() const |
bool | hasOwnProperty(const QString &name) const |
bool | hasProperty(const QString &name) const |
bool | isArray() const |
bool | isBool() const |
bool | isCallable() const |
bool | isDate() const |
bool | isError() const |
bool | isNull() const |
bool | isNumber() const |
bool | isObject() const |
bool | isQMetaObject() const |
bool | isQObject() const |
bool | isRegExp() const |
bool | isString() const |
bool | isUndefined() const |
bool | isUrl() const |
(until 6.9) bool | isVariant() const |
QJSValue | property(const QString &name) const |
QJSValue | property(quint32 arrayIndex) const |
QJSValue | prototype() const |
void | setProperty(const QString &name, const QJSValue &value) |
void | setProperty(quint32 arrayIndex, const QJSValue &value) |
void | setPrototype(const QJSValue &prototype) |
bool | strictlyEquals(const QJSValue &other) const |
bool | toBool() const |
QDateTime | toDateTime() const |
qint32 | toInt() const |
double | toNumber() const |
QJSPrimitiveValue | toPrimitive() const |
const QMetaObject * | toQMetaObject() const |
QObject * | toQObject() const |
QString | toString() const |
quint32 | toUInt() const |
QVariant | toVariant(QJSValue::ObjectConversionBehavior behavior) const |
QVariant | toVariant() const |
QJSValue & | operator=(QJSValue &&other) |
QJSValue & | operator=(const QJSValue &other) |
関連する非メンバー
詳細説明
QJSValueは、ECMA-262標準に定義されている型をサポートしています:プリミティブ型(Undefined、Null、Boolean、Number、String)、オブジェクト型、配列型。さらに、QVariant やQObject のような Qt/C++ 型の組み込みサポートも提供されています。
オブジェクト・ベースの型(DateやRegExpを含む)については、QJSEngine (例えば、QJSEngine::newObject ())のnewT()関数を使用して、必要な型のQJSValueを作成します。プリミティブ型については、QJSValueコンストラクタのオーバーロードの1つを使用してください。その他の型、例えばQPoint のような登録されたガジェット型には、QJSEngine::toScriptValue を使用できます。
isT()という名前のメソッド(例:isBool(),isUndefined())は、値が特定の型であるかどうかをテストするために使用できます。toT() という名前のメソッド (例:toBool(),toString()) は、QJSValue を別の型に変換するために使用できます。汎用のqjsvalue_cast()関数も使えます。
オブジェクト値は、それ自身がQJSValueである0個以上のプロパティを持ちます。オブジェクトのプロパティを設定するにはsetProperty() を使用し、プロパティの値を取得するにはproperty() を呼び出します。
QJSEngine myEngine; QJSValue myObject = myEngine.newObject(); QJSValue myOtherObject = myEngine.newObject(); myObject.setProperty("myChild", myOtherObject); myObject.setProperty("name", "John Doe");
スクリプト・オブジェクトのプロパティを反復処理したい場合は、QJSValueIterator クラスを使用します。
オブジェクトの値には内部にprototype
プロパティがあり、prototype() やsetPrototype() でアクセスできます。
関数オブジェクト(isCallable()) が true を返すオブジェクト)は、call() を呼び出すことで呼び出すことができます。コンストラクタ関数を使用して新しいオブジェクトを構築するには、callAsConstructor() を呼び出します。
QJSValue と別の QJSValue を比較するには、equals() またはstrictlyEquals() を使用します。
isObject() が真である QJSValue は、実際のオブジェクトへの参照のみを保持することに注意してください。オブジェクトのクローン(オブジェクトのプロパティを別のオブジェクトにコピーすること)を行いたい場合、スクリプトコードではfor-in
、C++ではQJSValueIterator 。
配列を使う
QJSValueを使用して配列を作成するには、QJSEngine::newArray ()を使用します:
// Assumes that this class was declared in QML. QJSValue jsArray = engine->newArray(3);
配列の個々の要素を設定するには、setProperty(quint32 arrayIndex, const QJSValue &value)オーバーロードを使用します。例えば、上の配列を整数で埋めるには、次のようにします:
for (int i = 0; i < 3; ++i) { jsArray.setProperty(i, QRandomGenerator::global().generate()); }
配列の長さを決定するには、"length"
プロパティにアクセスします。配列要素にアクセスするには、property(quint32 arrayIndex)オーバーロードを使用します。次のコードは、上記で作成した配列を読み込んでリストに戻します:
QVector<int> integers; const int length = jsArray.property("length").toInt(); for (int i = 0; i < length; ++i) { integers.append(jsArray.property(i).toInt()); }
JSONへの変換
QJSValueをJSON型に変換することができます。例えば、配列に変換するには、QJSEngine::fromScriptValue ()を使います:
const QJsonValue jsonValue = engine.fromScriptValue<QJsonValue>(jsValue); const QJsonArray jsonArray = jsonValue.toArray();
QJSEngine およびQJSValueIteratorも参照してください 。
メンバ型のドキュメント
enum QJSValue::ErrorType
JavaScript言語固有のErrorオブジェクト型には、この列挙型を使用します。
C++ の言語機能をエミュレートする際に、特殊な例外型を使用する必要がある場合に便利です。さらに、一般的な JavaScript 例外をスローする代わりに、特定の典型的な状態をより明確に伝えるのに役立つかもしれません。たとえば、ネットワークやリソースロケータを扱うコードでは、URIError 型を使用して、不正なロケータに関連するエラーを伝播することが便利です。
定数 | 値 | 説明 |
---|---|---|
QJSValue::GenericError | 1 | 特定のサブタイプではなく、一般的な Error オブジェクト。 |
QJSValue::RangeError | 3 | 値が期待されたセットまたは範囲にマッチしなかった。 |
QJSValue::ReferenceError | 4 | 存在しない変数が参照されました。 |
QJSValue::SyntaxError | 5 | 言語の構文に適合しない無効なトークンまたはトークンの列に遭遇しました。 |
QJSValue::TypeError | 6 | オペランドまたは引数が期待された型と互換性がありません。 |
QJSValue::URIError | 7 | URI処理関数の使用方法が間違っているか、指定されたURIが不正です。 |
enum QJSValue::ObjectConversionBehavior
この列挙型は、同等の Qt ネイティブ型を持たない JavaScript オブジェクトやシンボルをQVariant に変換する際に、どのように扱うかを指定するために使用します。
定数 | 値 | 説明 |
---|---|---|
QJSValue::ConvertJSObjects | 0 | 最善の努力で、おそらく非可逆的な変換が試みられます。シンボルはQString に変換されます。 |
QJSValue::RetainJSObjects | 1 | 値はQVariant でラップされたQJSValue として保持されます。 |
enum QJSValue::SpecialValue
この列挙型は単一値型を指定するために使用されます。
定数 | 値 | 説明 |
---|---|---|
QJSValue::UndefinedValue | 1 | 未定義値。 |
QJSValue::NullValue | 0 | NULL 値。 |
メンバ関数ドキュメント
QJSValue::QJSValue(QJSValue::SpecialValue value = UndefinedValue)
特別なvalue を持つ新しい QJSValue を構築する。
QJSValue::QJSValue(bool value)
value を持つ新しい QJSValue を構築します。
QJSValue::QJSValue(const QLatin1String &value)
文字列value で新しい QJSValue を構築する。
QJSValue::QJSValue(const QString &value)
文字列value で新しい QJSValue を構築する。
QJSValue::QJSValue(const char *value)
文字列value で新しい QJSValue を構築する。
QJSValue::QJSValue(double value)
数値value を持つ新しい QJSValue を構築する。
QJSValue::QJSValue(int value)
数値value を持つ新しい QJSValue を構築する。
QJSValue::QJSValue(uint value)
数値value を持つ新しい QJSValue を構築する。
QJSValue::QJSValue(const QJSValue &other)
other のコピーである新しい QJSValue を構築します。
other がオブジェクトである場合(つまり、isObject() が真を返す場合)、基礎となるオブジェクトへの参照のみが新しいスクリプト値にコピーされる(つまり、オブジェクト自体はコピーされない)ことに注意してください。
QJSValue::QJSValue(QJSValue &&other)
移動コンストラクタ。other からこの QJSValue オブジェクトに移動します。
[noexcept]
QJSValue::~QJSValue()
このQJSValue を破壊する。
QJSValue QJSValue::call(const QJSValueList &args = QJSValueList()) const
QJSValue 関数に引数としてargs を渡し、globalObject() を "this" オブジェクトとして使用します。関数から返された値を返します。
このQJSValue が呼び出し可能でない場合、call() は何も行わず、未定義のQJSValue を返します。
call() を呼び出すと、スクリプト・エンジンで例外が発生することがあります。その場合、 call() はスローされた値 (通常はError
オブジェクト) を返します。その場合、call() はスローされた値 (通常はisError オブジェクト) を返します。この返り値に対して () をコールすると、例外が発生したかどうかを判断できます。
isCallable()、callWithInstance()、callAsConstructor()も参照してください 。
QJSValue QJSValue::callAsConstructor(const QJSValueList &args = QJSValueList()) const
新しいObject
を作成し、このQJSValue をコンストラクタとして呼び出す。作成されたオブジェクトを `this' オブジェクトとして使い、引数としてargs を渡す。コンストラクタ呼び出しの戻り値がオブジェクトであれば、そのオブジェクトが返され、そうでなければデフォルトのオブジェクトが返されます。
このQJSValue が関数でない場合、callAsConstructor() は何もせず、未定義のQJSValue を返す。
この関数を呼び出すと、スクリプト・エンジンで例外が発生することがあります。その場合は、スローされた値(通常はError
オブジェクト)が返されます。例外が発生したかどうかを調べるには、返り値に対してisError() を呼び出します。
call() およびQJSEngine::newObject()も参照してください 。
QJSValue QJSValue::callWithInstance(const QJSValue &instance, const QJSValueList &args = QJSValueList()) const
このQJSValue を関数として呼び出し、instance を `this' オブジェクトとして関数呼び出しに使用し、args を関数の引数として渡す。関数から返された値を返す。
このQJSValue が関数でない場合、call() は何もせず、未定義のQJSValue を返す。
instance がオブジェクトでない場合、グローバルオブジェクト(QJSEngine::globalObject() を参照)が `this' オブジェクトとして使用されることに注意してください。
call() を呼び出すと、スクリプトエンジンで例外が発生することがあります。その場合、call() はスローされた値 (通常はError
オブジェクト) を返します。この返り値に対してisError() を呼び出すと、例外が発生したかどうかを判断できます。
call()も参照してください 。
bool QJSValue::deleteProperty(const QString &name)
与えられたname のこのオブジェクトのプロパティの削除を試みます。プロパティが削除された場合はtrueを返し、そうでない場合はfalseを返します。
この関数の動作は、JavaScript の delete 演算子と一致しています。特に
- 設定不可能なプ ロパテ ィ は削除で き ません。
- この関数は、このオブジェクトが与えられたname のプロパティを持っていなくても真を返します(つまり、存在しないプロパティは「trivially deletable」です)。
- このオブジェクトが指定されたname のプロパティを持たず、prototype() チェーンのオブジェクトが持つ場合、プロトタイプオブジェクトのプロパティは削除されず、この関数は真を返します。
setProperty() およびhasOwnProperty()も参照してください 。
bool QJSValue::equals(const QJSValue &other) const
このQJSValue がother と等しければ真を返し、そうでなければ偽を返す。比較はECMA-262セクション11.9.3「抽象等値比較アルゴリズム」に記述された動作に従う。
この関数は、このQJSValue の型がother の値の型と異なっていても真を返すことができる。例えば、数値9と文字列 "9 "を比較すると真を返し、未定義値とヌル値を比較すると真を返し、プリミティブ値が "6 "のNumber
オブジェクトとプリミティブ値が "6 "のString
オブジェクトを比較すると真を返し、数値1とブール値true
を比較すると真を返します。このような暗黙の値変換を行わずに比較を行いたい場合は、strictlyEquals ()を使用する。
toStringこのQJSValue やother の値がオブジェクトである場合、この関数を呼び出すと スクリプトエンジンに副作用が発生することに注意してください。
strictlyEquals()も参照してください 。
QJSValue::ErrorType QJSValue::errorType() const
このQJSValue が Error オブジェクトの場合、そのエラータイプを返します。そうでない場合はNoError."
isError() およびQJSEngine - Script Exceptionsも参照 。
bool QJSValue::hasOwnProperty(const QString &name) const
このオブジェクトが、与えられたname の(プロトタイプ継承でない)プロパティを持つ場合、true を返し、そうでない場合は false を返します。
property() およびhasProperty()も参照してください 。
bool QJSValue::hasProperty(const QString &name) const
このオブジェクトが、指定されたname のプロパティを持つ場合は true を返し、そうでない場合は false を返します。
property() およびhasOwnProperty()も参照してください 。
bool QJSValue::isArray() const
このQJSValue が Array クラスのオブジェクトであれば真を返し、そうでなければ偽を返します。
QJSEngine::newArray()も参照 。
bool QJSValue::isBool() const
このQJSValue がプリミティブな Boolean 型であれば真を返し、そうでなければ偽を返す。
toBool()も参照してください 。
bool QJSValue::isCallable() const
このQJSValue が関数であれば true を返し、そうでなければ false を返す。
call()も参照 。
bool QJSValue::isDate() const
このQJSValue が Date クラスのオブジェクトである場合は true を返し、そうでない場合は false を返します。
bool QJSValue::isError() const
このQJSValue が Error クラスのオブジェクトであれば真を返し、そうでなければ偽を返します。
errorType() およびQJSEngine - Script Exceptionsも参照してください 。
bool QJSValue::isNull() const
このQJSValue がプリミティブな Null 型であれば真を返し、そうでなければ偽を返す。
bool QJSValue::isNumber() const
このQJSValue がプリミティブな Number 型であれば真を返し、そうでなければ偽を返す。
toNumber()も参照 。
bool QJSValue::isObject() const
このQJSValue が Object 型であれば真を返し、そうでなければ偽を返す。
関数値、バリアント値、QObject 値はオブジェクトなので、この関数はそのような値に対して真を返すことに注意してください。
QJSEngine::newObject()も参照してください 。
bool QJSValue::isQMetaObject() const
このQJSValue がQMetaObject であれば真を返し、そうでなければ偽を返す。
toQMetaObject() およびQJSEngine::newQMetaObject()も参照 。
bool QJSValue::isQObject() const
このQJSValue がQObject であれば真を返し、そうでなければ偽を返す。
注意:この関数は、このQJSValue がラップしているQObject が削除されていても真を返す。
toQObject() およびQJSEngine::newQObject()も参照 。
bool QJSValue::isRegExp() const
このQJSValue が RegExp クラスのオブジェクトであれば真を返し、そうでなければ偽を返します。
bool QJSValue::isString() const
このQJSValue がプリミティブ型 String の場合は true を返し、そうでない場合は false を返す。
toString()も参照 。
bool QJSValue::isUndefined() const
このQJSValue が Undefined プリミティブ・タイプの場合、または(エンジンを削除して)管理値がクリアされている場合は true を返します。そうでない場合は偽を返します。
bool QJSValue::isUrl() const
このQJSValue が URL JavaScript クラスのオブジェクトであれば true を返し、そうでなければ false を返す。
[until 6.9]
bool QJSValue::isVariant() const
この関数はバージョン 6.9 で非推奨となる予定です。
このQJSValue が variant 値であれば true を返し、そうでなければ false を返します。
そうでなければ false を返します: この関数は予期せぬ結果を与える可能性が高い。バリアント値がQJSEngine によって構築されるのは、非常に限られた場合だけです。これはQt 5.14以前では異なっており、ECMAScriptの型に対応するのではなく、QJSEngine::toScriptValue 。isVariant
が false を返す多くの値に対して、toVariant を介して有効なQVariant を得ることができます。
toVariant()も参照してください 。
QJSValue QJSValue::property(const QString &name) const
与えられたname を持つこのQJSValue のプロパティの値を返す。そのようなプロパティが存在しない場合、未定義のQJSValue が返されます。
プロパティがゲッター関数を使用して実装されている(つまり、PropertyGetter フラグが設定されている)場合、ゲッター関数が呼び出されるため、property() を呼び出すとスクリプト・エンジンに副作用が生じます(キャッチされないスクリプト例外が発生する可能性があります)。例外が発生した場合、property() はスローされた値 (通常はError
オブジェクト) を返します。
配列要素にアクセスするには、代わりにsetProperty(quint32 arrayIndex, const QJSValue &value)オーバーロードを使用します。
setProperty()、hasProperty()、QJSValueIteratorも参照してください 。
QJSValue QJSValue::property(quint32 arrayIndex) const
これはオーバーロードされた関数である。
与えられたarrayIndex にあるプロパティを返します。
配列の要素にアクセスするには、2つの方法があります。1つ目は、配列のインデックスをプロパティ名として使用する方法です:
qDebug() << jsValueArray.property(QLatin1String("4")).toString();
もう1つは、インデックスを取るオーバーロードを使用する方法です:
qDebug() << jsValueArray.property(4).toString();
これらのアプローチはどちらも同じ結果をもたらしますが、後者の方が簡単です:
- 使いやすい(整数を直接使える)
- より高速(整数への変換が不要)
このQJSValue が Array オブジェクトでない場合、この関数は、property() がarrayIndex の文字列表現で呼び出されたかのように動作する。
QJSValue QJSValue::prototype() const
このQJSValue がオブジェクトである場合、このオブジェクトの内部プロトタイプ(__proto__
プロパティ)を返す。そうでない場合、未定義のQJSValue を返す。
setPrototype() およびisObject()も参照のこと 。
void QJSValue::setProperty(const QString &name, const QJSValue &value)
与えられたname を持つこのQJSValue のプロパティの値を、与えられたvalue に設定する。
このQJSValue がオブジェクトでない場合、この関数は何もしません。
このQJSValue がname という名前のプロパティをまだ持っていない場合、新しいプロパティが作成されます。
配列要素を変更するには、代わりにsetProperty(quint32 arrayIndex, const QJSValue &value)オーバーロードを使用します。
property() およびdeleteProperty()も参照してください 。
void QJSValue::setProperty(quint32 arrayIndex, const QJSValue &value)
これはオーバーロードされた関数である。
与えられたarrayIndex にあるプロパティを、与えられたvalue に設定します。
配列の要素を変更するには、2つの方法があります。1つ目は、配列のインデックスをプロパティ名として使用する方法です:
jsValueArray.setProperty(QLatin1String("4"), value);
もう1つは、インデックスを取るオーバーロードを使用する方法です:
jsValueArray.setProperty(4, value);
これらのアプローチはどちらも同じ結果をもたらしますが、後者の方がより簡単です:
- 使いやすい(整数を直接使える)
- より高速(整数への変換が不要)
このQJSValue が Array オブジェクトでない場合、この関数は setProperty() がarrayIndex の文字列表現で呼び出されたかのように動作する。
property(quint32 arrayIndex) およびWorking With Arraysも参照 。
void QJSValue::setPrototype(const QJSValue &prototype)
このQJSValue がオブジェクトの場合、このオブジェクトの内部プロトタイプ(__proto__
プロパティ)をprototype に設定する。QJSValue が NULL の場合、プロトタイプを NULL に設定し、それ以外の場合は何もしない。
内部プロトタイプは、"prototype "という名前のパブリック・プロパティと混同しないでください。パブリック・プロトタイプは通常、コンストラクタとして動作する関数にのみ設定されます。
prototype() およびisObject()も参照 。
bool QJSValue::strictlyEquals(const QJSValue &other) const
厳密な比較(変換なし)を用いて、このQJSValue がother と等しければ真を返し、そうでなければ偽を返す。この比較は、ECMA-26211.9.6項「厳密な等しい比較アルゴリズム」に記述された動作に従う。
このQJSValue の型がother の値の型と異なる場合、この関数は false を返す。型が等しい場合、結果は以下の表に示すように型に依存する:
型 | 結果 |
---|---|
未定義 | 真 |
Null | 真 |
ブール値 | 両方の値が真なら真、そうでなければ偽 |
数値 | いずれかの値がNaN(Not-a-Number)であればfalse、値が等しければtrue、そうでなければfalse |
文字列 | 両方の値がまったく同じ文字列であれば真、そうでなければ偽 |
オブジェクト | 両方の値が同じオブジェクトを指していれば真、そうでなければ偽 |
equals()も参照 。
bool QJSValue::toBool() const
ECMA-262セクション9.2「ToBoolean」に記述されている変換ルールを使用して、このQJSValue のブール値を返す。
このQJSValue がオブジェクトである場合、この関数を呼び出すとスクリプトエンジンに副作用があることに注意。なぜなら、エンジンはオブジェクトをプリミティブ値に変換しようとして、オブジェクトの valueOf() 関数 (および場合によってはtoString()) を呼び出すからである (キャッチされないスクリプト例外が発生する可能性がある)。
isBool()も参照してください 。
QDateTime QJSValue::toDateTime() const
QDateTime この値をローカル時間で表現したものを返す。このQJSValue が日付でない場合、あるいは日付の値が NaN (Not-a-Number) である場合は、無効なQDateTime が返される。
isDate()も参照のこと 。
qint32 QJSValue::toInt() const
ECMA-262セクション9.5 "ToInt32 "に記述されている変換規則を使用して、このQJSValue の符号付き32ビット整数値を返します。
このQJSValue がオブジェクトである場合、この関数を呼び出すとスクリプトエンジンに副作用があります。なぜなら、エンジンはオブジェクトをプリミティブ値に変換しようとしてオブジェクトの valueOf() 関数 (および場合によってはtoString()) を呼び出すからです (キャッチされないスクリプト例外が発生する可能性があります)。
toNumber() およびtoUInt()も参照して ください。
double QJSValue::toNumber() const
ECMA-262セクション9.3「ToNumber」で定義されているように、このQJSValue の数値値を返す。
このQJSValue がオブジェクトである場合、この関数を呼び出すとスクリプトエンジンに副作用があることに注意。なぜなら、エンジンはオブジェクトをプリミティブ値に変換しようとしてオブジェクトの valueOf() 関数 (および場合によってはtoString()) を呼び出すからである (キャッチされないスクリプト例外が発生する可能性がある)。
isNumber()、toInt()、toUInt()も参照 。
QJSPrimitiveValue QJSValue::toPrimitive() const
QJSPrimitiveValue値がQJSPrimitiveValue でサポートされている型を保持している場合、値はコピーされる。そうでない場合、値は文字列に変換され、その文字列がQJSPrimitiveValue に格納される。
注: 管理された値を文字列に変換すると、例外がスローされることがある。特に、シンボルを文字列に強制することはできません。また、カスタムのtoString() メソッドがスローすることもあります。この場合、結果は未定義値となり、変換後にエンジンはエラーを出力します。
const QMetaObject *QJSValue::toQMetaObject() const
nullptr
* このQJSValue がQMetaObject の場合、QJSValue が表すQMetaObject ポインタを返す。* *
isQMetaObject()も参照のこと 。
QObject *QJSValue::toQObject() const
このQJSValue がQObject である場合、QJSValue が表すQObject ポインタを返す。そうでない場合、nullptr
を返す。
このQJSValue がラップしているQObject が削除されている場合、この関数はnullptr
を返す(つまり、isQObject() が true を返す場合でも、toQObject() がnullptr
を返す可能性がある)。
isQObject()も参照 。
QString QJSValue::toString() const
ECMA-262セクション9.8「ToString」で定義されているように、このQJSValue の文字列値を返す。
このQJSValue がオブジェクトの場合、この関数を呼び出すとスクリプトエンジンに副作用があることに注意してください。なぜなら、エンジンはオブジェクトをプリミティブ値に変換しようとしてオブジェクトの toString() 関数 (および場合によっては valueOf()) を呼び出すからです (キャッチされないスクリプト例外が発生する可能性があります)。
isString()も参照ください 。
quint32 QJSValue::toUInt() const
ECMA-262セクション9.6 "ToUint32 "に記述されている変換規則を使用して、このQJSValue の符号なし32ビット整数値を返す。
このQJSValue がオブジェクトである場合、この関数を呼び出すとスクリプトエンジンに副作用があることに注意。なぜなら、エンジンはオブジェクトをプリミティブ値に変換しようとしてオブジェクトの valueOf() 関数 (および場合によってはtoString()) を呼び出すからである (キャッチされないスクリプト例外が発生する可能性がある)。
toNumber() およびtoInt()も参照して ください。
QVariant QJSValue::toVariant(QJSValue::ObjectConversionBehavior behavior) const
このQJSValue のQVariant の値を返します。QVariant に変換できる場合は、QVariant を返します。それらはネイティブな式に変換されます。例えば
入力タイプ | 結果 |
---|---|
未定義 | 無効なQVariant 。 |
Null | null ポインタを含むQVariant (QMetaType::Nullptr). |
ブール値 | ブール値を含むQVariant 。 |
数値 | 数値の値を含むQVariant 。 |
文字列 | 文字列の値を含むQVariant 。 |
QVariant オブジェクト | 結果はオブジェクトのQVariant 値(変換なし)。 |
QObject オブジェクト | QObject へのポインタを含むQVariant 。 |
日付 オブジェクト | 日付値を含むQVariant (toDateTime())。 |
RegularExpression オブジェクト | QVariant 正規表現値を含む。 |
その他の型については、behavior パラメータが関係する。ConvertJSObjects
が指定された場合、最善の努力は尽くされますが、おそらく損失が大きい変換が試みられます。一般的な JavaScript オブジェクトはQVariantMap に変換されます。JavaScript の配列はQVariantList に変換されます。 各プロパティや要素はQVariant に再帰的に変換されます。JavaScript関数オブジェクトは削除されます。RetainJSObjects
が与えられた場合、QJSValue はQVariant::fromValue() を介してQVariant にラップされます。変換結果はロスレスですが、オブジェクトの内部構造にはすぐにはアクセスできません。
isVariant()も参照 。
QVariant QJSValue::toVariant() const
これはオーバーロードされた関数である。
toVariant(ConvertJSObjects) を返す。
isVariant()も参照してください 。
QJSValue &QJSValue::operator=(QJSValue &&other)
Move-other をこのQJSValue オブジェクトに割り当てる。
QJSValue &QJSValue::operator=(const QJSValue &other)
QJSValue にother の値を代入する。
other がオブジェクトの場合 (isObject() が真を返す)、そのオブジェクトへの参照のみが割り当てられ、オブジェクト自体はコピーされないことに注意。
© 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.