このページでは

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
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 といったプリミティブ型、および Object 型と Array 型をサポートしています。さらに、QVariant やQObject といった Qt/C++ 型に対する組み込みサポートも提供されています。

オブジェクトベースの型(DateやRegExpを含む)については、QJSEngine 内のnewT()関数(例:QJSEngine::newObject()) を使用して、目的の型のQJSValueを作成します。プリミティブ型については、QJSValueのコンストラクタのオーバーロードのいずれかを使用します。 その他の型(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同士を比較するには、equals() またはstrictlyEquals() を使用します。

isObject() の結果が true となる QJSValue は、実際のオブジェクトへの参照のみを保持していることに注意してください。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)のオーバーロードを使用します。次のコードは、上記で作成した配列をリストに読み戻すものです:

QList<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

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

定数値説明
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)

文字列「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() が true を返す場合)、新しいスクリプト値には基になるオブジェクトへの参照のみがコピーされます(つまり、オブジェクト自体はコピーされません)。

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 をundefinedとして返します。

call() を呼び出すと、スクリプトエンジンで例外が発生する場合があります。その場合、call() はスローされた値(通常はError オブジェクト)を返します。戻り値に対して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() は何も実行せず、`undefined` の `QJSValue` を返します。

なお、instance がオブジェクトでない場合、グローバルオブジェクト(QJSEngine::globalObject()を参照)が`this`オブジェクトとして使用されます。

call() を呼び出すと、スクリプトエンジンで例外が発生する場合があります。その場合、call() はスローされた値(通常はError オブジェクト)を返します。戻り値に対してisError() を呼び出すことで、例外が発生したかどうかを確認できます。

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

bool QJSValue::deleteProperty(const QString &name)

指定されたname のこのオブジェクトのプロパティを削除しようとします。プロパティが削除された場合はtrueを返し、そうでない場合はfalseを返します。

この関数の動作は、JavaScript の delete 演算子と一致しています。具体的には:

  • 設定不可のプロパティは削除できません。
  • このオブジェクトに指定されたname のプロパティが存在しない場合でも、この関数はtrueを返します(つまり、存在しないプロパティは「自明に削除可能」です)。
  • このオブジェクトに指定されたname のプロパティが存在しない場合でも、prototype()チェーン内のオブジェクトにそのプロパティが存在すれば、プロトタイプオブジェクトのプロパティは削除されず、この関数はtrueを返します。

setProperty() およびhasOwnProperty()も参照してください 。

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

このQJSValue がother と等しい場合はtrueを返し、そうでない場合はfalseを返します。この比較は、ECMA-262の11.9.3節「抽象等価比較アルゴリズム」に記載されている動作に従います。

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

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

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

QJSValue::ErrorType QJSValue::errorType() const

これが Error オブジェクトである場合、この `QJSValue ` が表すエラーの型を返します。そうでない場合は、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を返します。

注:この メソッドは 、JavaScript のArray.isArray()と同等の機能を持ちます。 これを使用して JavaScript の配列を識別することはできますが、JavaScript の配列ではない配列のようなオブジェクトに対してはすべて `false ` が返されます。これには、値型またはオブジェクト型の QMLリストオブジェクト、JavaScript の型付き配列、JavaScript の `ArrayBuffer` オブジェクト、およびユーザーが独自に作成した任意のカスタム配列のようなオブジェクトが含まれます。 ただし、これらはいずれも JavaScript の配列のように振る舞います。一般的に同じメソッドを公開しており、添字演算子も使用可能です。したがって、このメソッドを使用して、オブジェクトが配列のように使用できるかどうかを判断することは推奨されません。

QJSEngine::newArray()も参照してください 。

bool QJSValue::isBool() const

このQJSValue がプリミティブ型Booleanである場合はtrueを返し、そうでない場合はfalseを返します。

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

bool QJSValue::isCallable() const

このQJSValue が関数である場合はtrueを返し、そうでない場合はfalseを返します。

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

bool QJSValue::isDate() const

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

bool QJSValue::isError() const

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

errorType() およびQJSEngine - Script Exceptionsも参照してください 。

bool QJSValue::isNull() const

このQJSValue がプリミティブ型Nullである場合はtrueを返し、そうでない場合はfalseを返します。

bool QJSValue::isNumber() const

このQJSValue がプリミティブ型Numberである場合はtrueを返し、そうでない場合はfalseを返します。

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

bool QJSValue::isObject() const

このQJSValue がObject型である場合はtrueを返し、そうでない場合はfalseを返します。

関数値、バリアント値、およびQObject 値はオブジェクトであるため、この関数はそれらの値に対してtrueを返します。

QJSEngine::newObject()も参照してください 。

bool QJSValue::isQMetaObject() const

このQJSValue がQMetaObject である場合はtrueを返し、そうでない場合はfalseを返します。

toQMetaObject() およびQJSEngine::newQMetaObject()も参照してください 。

bool QJSValue::isQObject() const

このQJSValue がQObject である場合はtrueを返し、そうでない場合はfalseを返します。

注:この関数は、この `QJSValue ` がラップしている `QObject ` が削除されていた場合でも true を返します。

関連項目: toQObject() およびQJSEngine::newQObject()。

bool QJSValue::isRegExp() const

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

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>() はどちらの場合でも正常に動作します。

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

指定されたname を持つ、このQJSValue のプロパティの値を返します。そのようなプロパティが存在しない場合は、undefinedの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();

2つ目は、インデックスを引数として受け取るオーバーロードを使用する方法です:

qDebug() << jsValueArray.property(4).toString();

どちらの方法でも結果は同じですが、後者の方法の方が:

  • 使い勝手が良い(整数を直接使用できる)
  • 処理が高速(整数への変換が不要)

この `QJSValue ` が `Array` オブジェクトでない場合、この関数は、`arrayIndex` の文字列表現を引数として `property()` が呼び出されたかのように動作します。

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

QJSValue QJSValue::prototype() const

この `QJSValue ` がオブジェクトである場合、その内部プロトタイプ(__proto__ プロパティ)を返します。そうでない場合は、`undefined`(QJSValue )を返します。

setPrototype() およびisObject()も参照してください 。

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

このQJSValue のプロパティ「name 」の値を、指定された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);

2つ目は、インデックスを引数として受け取るオーバーロードを使用する方法です:

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

この `QJSValue ` が、厳密比較(型変換なし)において `other ` と等しい場合は `true` を返し、そうでない場合は `false` を返します。この比較は、ECMA-262の第 11.9.6 節「厳密等価比較アルゴリズム」に記載されている動作に従います。

このQJSValue の型が、other の値の型と異なる場合、この関数はfalseを返します。型が等しい場合、結果は次の表に示すように、型によって異なります:

型結果
未定義true
Nulltrue
ブール値値が両方ともtrueか、両方ともfalseの場合はtrue、それ以外はfalse
数値いずれかの値が NaN (Not-a-Number) の場合は false。値が等しい場合は true、それ以外は 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

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

* この `QJSValue ` が `QMetaObject` である場合、`QJSValue ` が表す `QMetaObject ` ポインタ * を返す。そうでない場合は、`nullptr` を返す。 * *

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 を返します。一部のJavaScript型やオブジェクトには、Qtにネイティブな表現があります。それらはそれぞれのネイティブな表現に変換されます。例:

入力型結果
未定義無効なQVariant 。
NullNull ポインタ(QMetaType::Nullptr )を含むQVariant 。
Booleanブール値の値を含むQVariant 。
Number数値の値を含むQVariant 。
文字列文字列の値を含むQVariant 。
QVariant Object結果は、オブジェクトのQVariant 値となります(変換は行われません)。
QVariantMap Objectオブジェクトに格納されているQVariantMap を含むQVariant (変換は行われない)。
QVariantHash Objectオブジェクトに格納されている `QVariantHash ` を含む `QVariant `(変換は行われません)。
QObject オブジェクトQObject へのポインタを含むQVariant 。
Date オブジェクト日付値(toDateTime()) を含む `QVariant `。
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)

other をこのQJSValue オブジェクトにムーブ代入します。

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

この `QJSValue` に `other ` の値を代入します。

なお、other がオブジェクトである場合(isObject() が true を返す場合)、基となるオブジェクトへの参照のみが代入され、オブジェクト自体はコピーされません。

関連する非メンバー

QJSValueList

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

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