QJSValue Class

QJSValueクラスは、Qt/JavaScriptデータ型のコンテナとして動作します。詳細...

Header: #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)、オブジェクト型、配列型。さらに、QVariantQObject のような 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::GenericError1特定のサブタイプではなく、一般的な Error オブジェクト。
QJSValue::RangeError3値が期待されたセットまたは範囲にマッチしなかった。
QJSValue::ReferenceError4存在しない変数が参照されました。
QJSValue::SyntaxError5言語の構文に適合しない無効なトークンまたはトークンの列に遭遇しました。
QJSValue::TypeError6オペランドまたは引数が期待された型と互換性がありません。
QJSValue::URIError7URI処理関数の使用方法が間違っているか、指定されたURIが不正です。

enum QJSValue::ObjectConversionBehavior

この列挙型は、同等の Qt ネイティブ型を持たない JavaScript オブジェクトやシンボルが、QVariant に変換される際にどのように扱われるかを指定するために使用されます。

定数説明
QJSValue::ConvertJSObjects0最善の努力で、おそらく非可逆的な変換が試みられます。シンボルはQString に変換されます。
QJSValue::RetainJSObjects1値はQVariant でラップされたQJSValue として保持されます。

enum QJSValue::SpecialValue

この列挙型は単一値型を指定するために使用される。

定数説明
QJSValue::UndefinedValue1未定義値。
QJSValue::NullValue0NULL 値。

メンバ関数ドキュメント

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)

文字列を持つ新しい QJSValue を構築するvalue.

QJSValue::QJSValue(const char *value)

文字列value を持つ新しい QJSValue を構築します。

QJSValue::QJSValue(double value)

数値を持つ新しい QJSValue を構築するvalue.

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

このQJSValueother と等しい場合は真を返し、そうでない場合は偽を返します。この比較は、ECMA-26211.9.3節「抽象等値比較アルゴリズム」に記述されている動作に従う。

この関数は、このQJSValue の型がother の値の型と異なっていても真を返すことができる。例えば、数値9と文字列 "9 "を比較すると真が返され、未定義値とヌル値を比較すると真が返され、プリミティブ値が6のNumber オブジェクトとプリミティブ値が "6 "のString オブジェクトを比較すると真が返され、数値1とブール値true を比較すると真が返されます。このような暗黙の値変換を行わずに比較を行いたい場合は、strictlyEquals ()を使用する。

toStringこのQJSValueother の値がオブジェクトである場合、この関数を呼び出すと スクリプトエンジンに副作用が発生します。

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 クラスのオブジェクトである場合は true を返し、そうでない場合は false を返します。

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

このQJSValueQMetaObject である場合は真を返し、そうでない場合は偽を返します。

toQMetaObject() およびQJSEngine::newQMetaObject() も参照

bool QJSValue::isQObject() const

このQJSValueQObject の場合は true を返し、そうでない場合は false を返す。

注意:この関数は、この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 を返します。そうでない場合は false を返します。

bool QJSValue::isUrl() const

このQJSValue が URL JavaScript クラスのオブジェクトである場合は true を返し、そうでない場合は false を返します。

注: QUrl を含むQJSValue の場合、この関数は false を返します。ただし、toVariant().value<QUrl>() はどちらの場合でも動作します。

[until 6.9] bool QJSValue::isVariant() const

この関数はバージョン6.9で廃止予定です。

このQJSValue がバリアント値である場合は true を返し、そうでない場合は false を返します。

警告 この関数は予期せぬ結果を与える可能性が高い。バリアント値がQJSEngine によって構築されるのは、非常に限られた場合だけです。これはQt 5.14以前では異なっており、QJSEngine::toScriptValue 、対応するECMAScript型ではなく、より多くの型に対して作成されていました。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 が配列オブジェクトでない場合、この関数は、arrayIndex の文字列表現で property() が呼び出されたかのように動作する。

QJSValue QJSValue::prototype() const

QJSValueこのQJSValue がオブジェクトの場合、このオブジェクトの内部プロトタイプ(__proto__ プロパティ)を返します。

setPrototype() およびisObject()も参照

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

与えられたname を持つこのQJSValue のプロパティの値を、与えられたvalue に設定します。

このQJSValue がオブジェクトでない場合、この関数は何も行いません。

このQJSValuename という名前のプロパティをまだ持っていない場合、新しいプロパティが作成されます。

配列要素を変更するには、代わりに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 オブジェクトでない場合、この関数は、arrayIndex の文字列表現で setProperty() が呼び出されたかのように動作する。

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

このQJSValueother と厳密比較(変換なし)で等しい場合は真を返し、そうでない場合は偽を返します。この比較は、ECMA-26211.9.6項 「厳密な等値比較アルゴリズム」に記述されている動作に従います。

このQJSValue の型がother の値の型と異なる場合、この関数は false を返す。型が等しい場合、結果は以下の表に示すように型に依存する:

結果
未定義
Null
ブール値両方の値が真なら真、そうでなければ偽
数値いずれかの値がNaN(Not-a-Number)であればfalse、値が等しければtrue、そうでなければ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

このQJSValue の符号付き 32 ビット整数値を、ECMA-2629.5 項「ToInt32」に記述された変換規則を用いて返す。

この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* このQJSValueQMetaObject の場合、QJSValue が表すQMetaObject ポインタを返します。* *

isQMetaObject()も参照のこと

QObject *QJSValue::toQObject() const

このQJSValueQObject である場合、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

このQJSValue の符号なし 32 ビット整数値を、ECMA-262 の9.6 節「ToUint32」に記述されている変換規則を使用して返します。

このQJSValue がオブジェクトである場合、この関数を呼び出すとスクリプトエンジンに副作用があることに注意。なぜなら、エンジンはオブジェクトをプリミティブ値に変換しようとしてオブジェクトの valueOf() 関数 (および場合によってはtoString()) を呼び出すからである (キャッチされないスクリプト例外が発生する可能性がある)。

toNumber() およびtoInt()も参照

QVariant QJSValue::toVariant(QJSValue::ObjectConversionBehavior behavior) const

このQJSValueQVariant に変換できる場合はQVariant の値を返し、そうでない場合は無効なQVariant を返します。 JavaScript の型やオブジェクトの中には、Qt でネイティブな式を持つものがあります。これらはネイティブな式に変換されます。例えば

入力タイプ結果
未定義無効なQVariant
Nullnull ポインタを含むQVariant (QMetaType::Nullptr).
ブール値ブール値を含むQVariant
数値数値の値を含むQVariant
文字列文字列の値を含むQVariant
QVariant オブジェクト結果はオブジェクトのQVariant 値(変換なし)。
QObject オブジェクトQObject へのポインタを含むQVariant
日付 オブジェクト日付値を含むQVariant (toDateTime())。
RegularExpression オブジェクトQVariant 正規表現値を含む。

その他の型については、behavior パラメータが関連する。ConvertJSObjects が指定された場合、最善の努力は尽くされますが、おそらく損失が大きい変換が試みられます。一般的な JavaScript オブジェクトはQVariantMap に変換されます。JavaScript の配列はQVariantList に変換されます。 各プロパティや要素はQVariant に再帰的に変換されます。JavaScript関数オブジェクトは削除されます。RetainJSObjects が与えられた場合、QJSValueQVariant::fromValue() を介してQVariant にラップされます。変換結果はロスレスですが、オブジェクトの内部構造にはすぐにはアクセスできません。

isVariant()も参照のこと

QVariant QJSValue::toVariant() const

これはオーバーロードされた関数である。

toVariant(ConvertJSObjects) を返します。

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

QJSValue &QJSValue::operator=(QJSValue &&other)

Move-other をこのQJSValue オブジェクトに割り当てます。

QJSValue &QJSValue::operator=(const QJSValue &other)

QJSValueother の値を割り当てます。

other がオブジェクトの場合 (isObject() が真を返す)、そのオブジェクトへの参照のみが割り当てられ、オブジェクト自体はコピーされないことに注意してください。

関連する非メンバー

QJSValueList

これはQList<QJSValue> の typedef です。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。