QJSEngine Class

QJSEngine クラスは、JavaScript コードを評価する環境を提供します。詳細...

ヘッダ #include <QJSEngine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
を継承する: QObject
継承元:

QQmlEngine

注意:このクラスの関数はすべてリエントラントです。

パブリック型

enum Extension { TranslationExtension, ConsoleExtension, GarbageCollectionExtension, AllExtensions }
flags Extensions
enum ObjectOwnership { CppOwnership, JavaScriptOwnership }

プロパティ

公共機能

QJSEngine()
QJSEngine(QObject *parent)
virtual ~QJSEngine() override
(since Qt 6.1) QJSValue catchError()
To coerceValue(const From &from)
void collectGarbage()
QJSValue evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1, QStringList *exceptionStackTrace = nullptr)
T fromManagedValue(const QJSManagedValue &value)
T fromPrimitiveValue(const QJSPrimitiveValue &value)
T fromScriptValue(const QJSValue &value)
T fromVariant(const QVariant &value)
QJSValue globalObject() const
(since Qt 6.1) bool hasError() const
QJSValue importModule(const QString &fileName)
void installExtensions(QJSEngine::Extensions extensions, const QJSValue &object = QJSValue())
bool isInterrupted() const
QJSValue newArray(uint length = 0)
QJSValue newErrorObject(QJSValue::ErrorType errorType, const QString &message = QString())
QJSValue newObject()
QJSValue newQMetaObject()
QJSValue newQMetaObject(const QMetaObject *metaObject)
QJSValue newQObject(QObject *object)
(since 6.2) QJSValue newSymbol(const QString &name)
bool registerModule(const QString &moduleName, const QJSValue &value)
void setInterrupted(bool interrupted)
void setUiLanguage(const QString &language)
(since Qt 5.12) void throwError(const QString &message)
(since 6.1) void throwError(const QJSValue &error)
(since Qt 5.12) void throwError(QJSValue::ErrorType errorType, const QString &message = QString())
QJSManagedValue toManagedValue(const T &value)
QJSPrimitiveValue toPrimitiveValue(const T &value)
QJSValue toScriptValue(const T &value)
QString uiLanguage() const

シグナル

静的パブリック・メンバー

QJSEngine::ObjectOwnership objectOwnership(QObject *object)
void setObjectOwnership(QObject *object, QJSEngine::ObjectOwnership ownership)
QJSEngine *qjsEngine(const QObject *object)

詳細説明

スクリプトの評価

スクリプトのコードを評価するには、evaluate() を使用します。

QJSEngine myEngine;
QJSValue three = myEngine.evaluate("1 + 2");

evaluate() は、評価結果を保持するQJSValue を返します。QJSValue クラスには、結果をさまざまな C++ 型に変換する関数が用意されています(QJSValue::toString() やQJSValue::toNumber() など)。

次のコード・スニペットは、スクリプト関数を定義し、QJSValue::call ()を使用して C++から呼び出す方法を示しています:

QJSValue fun = myEngine.evaluate("(function(a, b) { return a + b; })");
QJSValueList args;
args << 1 << 2;
QJSValue threeAgain = fun.call(args);

上記のスニペットからわかるように、スクリプトは文字列の形でエンジンに提供されます。スクリプトを読み込む一般的な方法の1つは、ファイルの内容を読み込んでevaluate() に渡す方法です:

QString fileName = "helloworld.qs";
QFile scriptFile(fileName);
if (!scriptFile.open(QIODevice::ReadOnly))
    // handle error
QTextStream stream(&scriptFile);
QString contents = stream.readAll();
scriptFile.close();
myEngine.evaluate(contents, fileName);

ここでは、evaluate ()の第2引数にファイル名を渡している。第2引数は、デバッグ用にError オブジェクトに格納される汎用文字列である。

より大規模な機能を使用する場合は、コードとデータをモジュールにカプセル化するとよいでしょう。モジュールとは、スクリプト・コードや変数などを含むファイルのことで、アプリケーションの残りの部分に対するインターフェイスを記述するためにexport文を使用します。import文の助けを借りて、モジュールは他のモジュールの機能を参照することができます。これによって、スクリプト化されたアプリケーションを、より小さなビルディングブロックから安全に構築することができます。対照的に、evaluate ()を使用するアプローチでは、あるevaluate ()呼び出しから内部変数や関数が誤ってグローバルオブジェクトを汚染し、後続の評価に影響を与えるというリスクがあります。

次の例は、数値を加算するモジュールです:

export function sum(left, right)
{
    return left + right
}

このモジュールは、math.mjs という名前で保存されていれば、QJSEngine::import() でロードできます:

QJSvalue module = myEngine.importModule("./math.mjs");
QJSValue sumFunction = module.property("sum");
QJSValue result = sumFunction.call(args);

モジュールは、import文を使って他のモジュールの機能を使うこともできます:

import { sum } from "./math.mjs";
export function addTwice(left, right)
{
    return sum(left, right) * 2;
}

モジュールはファイルである必要はありません。モジュールはファイルである必要はなく、QJSEngine::registerModule() で登録された値であってもかまいません:

import version from "version";

export function getVersion()
{
    return version;
}
QJSValue version(610);
myEngine.registerModule("version", version);
QJSValue module = myEngine.importModule("./myprint.mjs");
QJSValue getVersion = module.property("getVersion");
QJSValue result = getVersion.call();

名前付きエクスポートはサポートされていますが、オブジェクトのメンバとして扱われるため、デフォルトのエクスポートはECMAScriptオブジェクトでなければなりません。QJSValue の newXYZ 関数のほとんどはオブジェクトを返します。

QJSValue name("Qt6");
QJSValue obj = myEngine.newObject();
obj.setProperty("name", name);
myEngine.registerModule("info", obj);
import { name } from "info";

export function getName()
{
    return name;
}

エンジン構成

globalObject() 関数は、スクリプト・エンジンに関連付けられたグローバル・オブジェクトを返します。グローバル オブジェクトのプロパティは、スクリプト コードからアクセスできます (つまり、グローバル変数です)。通常、"ユーザー "スクリプトを評価する前に、Global Object に 1 つ以上のプロパティを追加してスクリプトエンジンを構成します:

myEngine.globalObject().setProperty("myNumber", 123);
...
QJSValue myNumberPlusOne = myEngine.evaluate("myNumber + 1");

スクリプト環境にカスタム プロパティを追加することは、アプリケーション固有のスクリプト API を提供する標準的な手段の 1 つです。通常、これらのカスタムプロパティは、newQObject() またはnewObject() 関数によって作成されるオブジェクトです。

スクリプトの例外

evaluate()関数は、スクリプトの例外を投げることができます(構文エラーなど)。その場合、evaluate() はスローされた値 (通常はError オブジェクト) を返します。例外のチェックにはQJSValue::isError() を使用します。

エラーの詳細については、QJSValue::toString() を使用してエラー・メッセージを取得し、QJSValue::property() を使用してError オブジェクトのプロパティを照会します。以下のプロパティを使用できます:

  • name
  • message
  • fileName
  • lineNumber
  • stack
QJSValueresult=myEngine.evaluate(...);if(result.isError())    qDebug()
           << "行で捕捉されなかった例外"<<result.property("lineNumber").toInt() << ":"<<result.toString();

スクリプト・オブジェクトの作成

JavaScript オブジェクトを作成するには、newObject() を使用します。これは C++ スクリプト文new Object() に相当します。スクリプト・オブジェクトを操作するには、QJSValue にあるオブジェクト固有の機能を使用します(QJSValue::setProperty() など)。同様に、newArray() を使用して、JavaScript の配列オブジェクトを作成します。

QObject の統合

QObject (またはサブクラス) ポインタをラップするには、newQObject() を使用します。newQObject(QObject のプロパティ、子オブジェクト、シグナルおよびスロットは、プロキシオブジェクトのプロパティとして使用できます。Qt メタオブジェクトシステムを使って動的に行われるため、バインディングコードは必要ありません。

QPushButton*ボタン = newQPushButton;QJSValuescriptButton=myEngine.newQObject(button); myEngine.globalObject().setProperty("button",scriptButton); myEngine.evaluate("button.checkable = true");
qDebug() << scriptButton.property("checkable").toBool();
scriptButton.property("show").call();// show()スロットを呼び出す

QMetaObject をラップするにはnewQMetaObject() を使用します。これにより、QObject ベースのクラスの「スクリプト表現」が得られます。newQMetaObject(クラスの列挙値は、プロキシオブジェクトのプロパティとして使用できます。

メタオブジェクトシステムに公開されているコンストラクタ(Q_INVOKABLE を使用)をスクリプトから呼び出して、新しいQObject インスタンスをJavaScriptOwnership で作成することができます。たとえば、次のようなクラス定義があるとする:

class MyObject : public QObject
{
    Q_OBJECT

public:
    Q_INVOKABLE MyObject() {}
};

このクラスのstaticMetaObject は、次のようにJavaScriptに公開できます:

QJSValue jsMetaObject = engine.newQMetaObject(&MyObject::staticMetaObject);
engine.globalObject().setProperty("MyObject", jsMetaObject);

このクラスのインスタンスはJavaScriptで作成できる:

engine.evaluate("var myObject = new MyObject()");

注: 現在、Q_OBJECT マクロを使用するクラスのみがサポートされています。Q_GADGET クラスのstaticMetaObject を JavaScript に公開することはできません。

動的 QObject プロパティ

動的なQObject プロパティはサポートされていません。例えば、以下のコードは動作しません:

QJSEngineエンジンは動作しません;QObject*myQObject = newQObject(myQObject->setProperty("dynamicProperty", 3);QJSValuemyScriptQObject=engine.newQObject(myQObject); engine.globalObject().setProperty("myObject",myScriptQObject);
qDebug() << engine.evaluate("myObject.dynamicProperty").toInt();

拡張機能

QJSEngineはECMAScriptに準拠した実装を提供します。デフォルトでは、ロギングのようなお馴染みのユーティリティは利用できませんが、installExtensions ()関数でインストールすることができます。

QJSValue「アプリケーションをスクリプト化する」、「JavaScriptオブジェクトと関数のリスト」も参照してください

メンバ型ドキュメント

enum QJSEngine::Extension
flags QJSEngine::Extensions

この enum は、installExtensions() を介してインストールする拡張機能を指定するために使用します。

定数説明
QJSEngine::TranslationExtension0x1翻訳関数 (qsTr() など) をインストールすることを示します。これは Qt.uiLanguage プロパティもインストールします。
QJSEngine::ConsoleExtension0x2コンソール関数 (console.log() など) をインストールすることを示します。
QJSEngine::GarbageCollectionExtension0x4ガベージコレクション機能 (gc() など) をインストールすることを示します。
QJSEngine::AllExtensions0xffffffffすべての拡張機能をインストールすることを示します。

翻訳拡張

スクリプト翻訳関数と C++ 翻訳関数の関係を以下の表に示します:

スクリプト関数対応する C++ 関数
qsTr()QObject::tr()
QT_TR_NOOP()QT_TR_NOOP()
qsTranslate()QCoreApplication::translate()
QT_TRANSLATE_NOOP()QT_TRANSLATE_NOOP()
qsTrId()qtTrId()
QT_TRID_NOOP()QT_TRID_NOOP()

このフラグは、文字列プロトタイプにarg() 関数も追加します。

詳細については、Internationalization with Qtドキュメントを参照してください。

ConsoleExtension

consoleオブジェクトは、Console API のサブセットを実装し、console.log() のようなおなじみのロギング関数を提供します。

追加された関数のリストは以下の通りです:

  • console.assert()
  • console.debug()
  • console.exception()
  • console.info()
  • console.log() ( と同等)console.debug()
  • console.error()
  • console.time()
  • console.timeEnd()
  • console.trace()
  • console.count()
  • console.warn()
  • print() ( と同等)console.debug()

詳細については、Console API のドキュメントを参照してください。

GarbageCollectionExtension

gc() 関数はcollectGarbage() を呼び出すのと同じです。

Extensions 型はQFlags<Extension> の typedef です。これは、Extension 値の OR の組み合わせを格納します。

enum QJSEngine::ObjectOwnership

ObjectOwnership は、対応する JavaScript オブジェクトがエンジンによってガベージコレクションされるときに、JavaScript メモリマネージャがQObject を自動的に破棄するかどうかを制御します。所有権のオプションは 2 つあります:

定数説明
QJSEngine::CppOwnership0オブジェクトは C++ コードによって所有され、JavaScript メモリ マネージャは決して削除しません。JavaScript の destroy() メソッドはこれらのオブジェクトでは使用できません。このオプションは QScriptEngine::QtOwnership に似ています。
QJSEngine::JavaScriptOwnership1オブジェクトはJavaScriptによって所有されます。オブジェクトがメソッド呼び出しの戻り値として JavaScript メモリマネージャに返されると、JavaScript メモリマネージャはそれを追跡し、それへの JavaScript 参照が残っておらず、QObject::parent() がない場合は削除します。あるQJSEngine によって追跡されたオブジェクトは、そのQJSEngine のデストラクタの間に削除されます。したがって、2 つの異なるエンジンの JavaScriptOwnership を持つオブジェクト間の JavaScript 参照は、これらのエンジンの 1 つが削除されると無効になります。このオプションは QScriptEngine::ScriptOwnership に似ています。

通常、アプリケーションはオブジェクトの所有権を明示的に設定する必要はありません。JavaScriptのメモリマネージャは、ヒューリスティックな方法でデフォルトの所有権を設定します。デフォルトでは、JavaScriptメモリマネージャによって作成されたオブジェクトはJavaScriptOwnershipを持ちます。この例外は、QQmlComponent::create() またはQQmlComponent::beginCreate() を呼び出して作成されたルートオブジェクトで、デフォルトでは CppOwnership を持っています。これらのルートレベルオブジェクトの所有権は、C++呼び出し元に移ったものとみなされます。

JavaScript メモリ マネージャによって作成されないオブジェクトは、デフォルトで CppOwnership を持っています。ただし、C++ メソッド呼び出しから返されたオブジェクトは例外で、その所有権は JavaScriptOwnership に設定されます。これはQ_INVOKABLE メソッドまたはスロットの明示的な呼び出しにのみ適用され、プロパティゲッターの呼び出しには適用されません。

setObjectOwnership() を呼び出すと、デフォルトの所有権が上書きされます。

データの所有権」も参照してください

プロパティのドキュメント

uiLanguage : QString

このプロパティは、ユーザインタフェース文字列の翻訳に使用される言語を保持します。

このプロパティは、ユーザー・インターフェイス文字列の翻訳に使用する言語の名前を保持します。このプロパティは、QJSEngine::TranslationExtension がエンジンにインストールされているとき、Qt.uiLanguage として読み書きのために公開されます。QQmlEngine のインスタンスでは常に公開されます。

この値は自由に設定でき、バインディングで使用できます。アプリケーションにトランスレータをインストールした後に設定することをお勧めします。慣習上、空文字列はソースコードで使用されている言語からの翻訳が意図されていないことを意味します。

アクセス関数

QString uiLanguage() const
void setUiLanguage(const QString &language)

通知シグナル

void uiLanguageChanged()

メンバ関数ドキュメント

QJSEngine::QJSEngine()

QJSEngine オブジェクトを構築する。

globalObject() は、ECMA-262 のセクション 15.1 に記述されているプロパティを持つように初期化されます。

[explicit] QJSEngine::QJSEngine(QObject *parent)

与えられたparent で QJSEngine オブジェクトを構築する。

globalObject() は、ECMA-262 のセクション 15.1 に記述されているプロパティを持つように初期化されます。

[override virtual noexcept] QJSEngine::~QJSEngine()

このQJSEngine を破棄する。

QJSEngine を破棄する間、永続 JS ヒープからゴミは収集されません。すべてのメモリを解放する必要がある場合は、QJSEngine を破棄する直前にcollectGarbage() を手動で呼び出してください。

[since Qt 6.1] QJSValue QJSEngine::catchError()

現在保留中の例外がある場合は、それをキャッチし、QJSValue として返す。そうでない場合は、QJSValue として未定義を返す。このメソッドを呼び出した後、hasError() はfalse を返します。

この関数は Qt 6.1 で導入されました。

template <typename From, typename To> To QJSEngine::coerceValue(const From &from)

与えられたfrom をテンプレート型To に変換して返します。変換はJavaScriptのセマンティクスで行われます。これらはqvariant_cast のセマンティクスとは異なります。デフォルトではqvariant_cast によって実行されない、JavaScript と等価な型間の多くの暗黙の変換があります。このメソッドは、このクラスの他のすべての変換メソッドの一般化です。

fromVariant(),qvariant_cast(),fromScriptValue(),toScriptValue()も参照してください

void QJSEngine::collectGarbage()

ガベージコレクタを実行する。

ガベージコレクタは、スクリプト環境内で到達できなくなったオブジェクトを探し出し、廃棄することで、メモリの再利用を試みます。

通常、この関数を呼び出す必要はありません。ガベージコレクタは、QJSEngine がそうするのが賢明だと判断したとき(つまり、一定数の新しいオブジェクトが作成されたとき)に自動的に呼び出されます。しかし、この関数を呼び出して、できるだけ早くガベージコレクションを実行するよう明示的に要求することもできます。

ガベージ・コレクションおよびgc()も参照の こと。

QJSValue QJSEngine::evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1, QStringList *exceptionStackTrace = nullptr)

lineNumber を基準行番号としてprogram を評価し、評価結果を返します。

スクリプトコードはグローバルオブジェクトのコンテキストで評価されます。

注意: QML コンテキスト内で評価する必要がある場合は、代わりにQQmlExpression を使用してください。

program を評価すると、エンジン内でexception が発生することがあります。この場合、返り値はスローされた例外(通常はError オブジェクト。QJSValue::isError() を参照)になります。

lineNumber は、 の開始行番号を指定するために使用されます。この評価に関連してエンジンから報告される行番号情報は、この引数に基づいています。たとえば、 が2行のコードで構成され、2行目のステートメントでスクリプト例外が発生した場合、例外行番号は に1を足したものになります。開始行番号が指定されない場合、行番号は1ベースとなる。program program lineNumber

fileName はエラー報告に使用されます。例えば、この関数でファイル名を指定すると、エラーオブジェクトの "fileName" プロパティにアクセスできるようになります。

exceptionStackTrace は、捕捉されない例外が発生したかどうかを報告するために使用されます。この関数に への NULL 以外のポインタを渡すと、スクリプトが未処理の例外をスローした場合は「スタックフレームメッセージ」のリストが設定され、そうでない場合は空のリストが設定されます。スタックフレームメッセージの形式は、関数名:行番号:列:ファイル名です。QStringList

注意 : ネイティブ関数の場合など、関数名とファイル名が空であったり、行番号と列が -1 であったりすることがあります。

注意: 例外が発生し、例外値がErrorインスタンスでない場合(すなわち、QJSValue::isError() がfalse を返す場合)も、例外値が返されます。その値が通常の戻り値なのか例外的な戻り値なのかを区別するには、exceptionStackTrace->isEmpty() を使用してください。

QQmlExpression::evaluateも参照してください

template <typename T> T QJSEngine::fromManagedValue(const QJSManagedValue &value)

与えられたvalue をテンプレート型T に変換して返します。

toManagedValue() およびcoerceValue()も参照

template <typename T> T QJSEngine::fromPrimitiveValue(const QJSPrimitiveValue &value)

与えられたvalue をテンプレート型T に変換して返します。

QJSPrimitiveValue は int、bool、double、QString 、および JavaScript のnullundefined に相当するものしか保持できないので、それ以外の型を要求すると、値は積極的に強制されます。

toPrimitiveValue() およびcoerceValue()も参照

template <typename T> T QJSEngine::fromScriptValue(const QJSValue &value)

与えられたvalue をテンプレート型T に変換して返します。

toScriptValue() およびcoerceValue()も参照

template <typename T> T QJSEngine::fromVariant(const QVariant &value)

与えられたvalue をテンプレート型T に変換して返します。変換はJavaScriptのセマンティクスで行われます。これらはqvariant_cast のセマンティクスとは異なります。デフォルトではqvariant_cast によって実行されない、JavaScript と同等の型間の多くの暗黙の変換があります。

coerceValue()、fromScriptValue()、qvariant_cast()も参照のこと

QJSValue QJSEngine::globalObject() const

このエンジンのグローバル・オブジェクトを返します。

デフォルトでは、グローバル・オブジェクトには、Math、Date、String などのECMA-262 の一部である組み込みオブジェクトが含まれます。さらに、グローバル・オブジェクトのプロパティを設定して、独自の拡張をすべてのスクリプト・コードで使用できるようにすることもできます。スクリプト・コード内の非ローカル変数は、グローバル・コード内のローカル変数と同様に、グローバル・オブジェクトのプロパティとして作成されます。

[since Qt 6.1] bool QJSEngine::hasError() const

最後にJavaScriptを実行した結果例外が発生した場合、またはthrowError() が呼び出された場合はtrue を返す。そうでない場合はfalse を返します。evaluate() は、評価されたコードでスローされた例外をキャッチすることに注意してください。

この関数は Qt 6.1 で導入されました。

QJSValue QJSEngine::importModule(const QString &fileName)

fileName にあるモジュールをインポートし、すべてのエクスポートされた変数、定数、関数をプロパティとして含むモジュール名前空間オブジェクトを返します。

エンジンでモジュールのインポートが初めての場合、ファイルはローカルファイルシステムまたは Qt リソースシステムの指定された場所からロードされ、ECMAScript モジュールとして評価されます。ファイルは UTF-8 テキストでエンコードされます。

同じモジュールを続けてインポートすると、前にインポートしたインスタンスが返されます。モジュールはシングルトンであり、エンジンが破棄されるまで残ります。

指定されたfileName は、内部的にQFileInfo::canonicalFilePath() を使って正規化されます。つまり、ディスク上の同じファイルを異なる相対パスで複数回インポートしても、ファイルは1回しかロードされません。

注意: モジュールのロード中に例外が発生した場合、戻り値はその例外 (通常はError オブジェクト。QJSValue::isError() を参照) となります。

registerModule()も参照

void QJSEngine::installExtensions(QJSEngine::Extensions extensions, const QJSValue &object = QJSValue())

標準のECMAScript実装では利用できない機能を追加するために、JavaScriptextensions をインストールする。

拡張は、与えられたobject 、またはオブジェクトが指定されていない場合はGlobal Object にインストールされます。

列挙値をOR- することで、複数の拡張を一度にインストールすることができます:

installExtensions(QJSEngine::TranslationExtension | QJSEngine::ConsoleExtension);

Extensionも参照

bool QJSEngine::isInterrupted() const

JavaScript の実行が現在中断されているかどうかを返します。

setInterrupted()も参照 ください。

QJSValue QJSEngine::newArray(uint length = 0)

与えられたlength で Array クラスの JavaScript オブジェクトを作成します。

newObject()も参照

QJSValue QJSEngine::newErrorObject(QJSValue::ErrorType errorType, const QString &message = QString())

エラーメッセージとしてmessage を持つ、Error クラスの JavaScript オブジェクトを作成します。

作成されたオブジェクトのプロトタイプはerrorType になります。

newObject()、throwError()、QJSValue::isError()も参照

QJSValue QJSEngine::newObject()

Object クラスの JavaScript オブジェクトを作成します。

作成されたオブジェクトのプロトタイプは Object プロトタイプオブジェクトになります。

newArray() およびQJSValue::setProperty()も参照してください

template <typename T> QJSValue QJSEngine::newQMetaObject()

クラスT に関連付けられた静的なQMetaObject をラップする JavaScript オブジェクトを作成します。

newQObject() およびQObject Integrationも参照してください

QJSValue QJSEngine::newQMetaObject(const QMetaObject *metaObject)

与えられたQMetaObject をラップする JavaScript オブジェクトを作成します。metaObject はスクリプトエンジンよりも長生きしなければなりません。このメソッドは静的メタオブジェクトでのみ使用することをお勧めします。

コンストラクタとして呼ばれると、クラスの新しいインスタンスが作成されます。スクリプトエンジンから見えるのは、Q_INVOKABLE によって公開されたコンストラクタだけです。

newQObject() およびQObject Integrationも参照してください

QJSValue QJSEngine::newQObject(QObject *object)

与えられたQObject object をラップする JavaScript オブジェクトを、JavaScriptOwnership を使って作成します。

object のシグナルとスロット、プロパティと子は、作成されたQJSValue のプロパティとして利用可能です。

object が NULL ポインタの場合、この関数は NULL 値を返します。

object のクラス(または再帰的にそのスーパークラス)にデフォルトのプロトタイプが登録されている場合、新しいスクリプトオブジェクトのプロトタイプはそのデフォルトのプロトタイプに設定されます。

指定 さ れたobject がエン ジ ンの制御外で削除 さ れた場合、 JavaScript ラ ッ パオブジ ェ ク ト を通 じ て削除 さ れたQObject の メ ンバにア ク セ ス し よ う と す る と (ス ク リ プ ト コ ー ド で も C++ で も)、script exception にな り ます。

QJSValue::toQObject()も参照してください

[since 6.2] QJSValue QJSEngine::newSymbol(const QString &name)

nameSymbol クラスの JavaScript オブジェクトを作成します。

作成されたオブジェクトのプロトタイプは Symbol プロトタイプオブジェクトになります。

この関数は Qt 6.2 で導入されました。

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

[static] QJSEngine::ObjectOwnership QJSEngine::objectOwnership(QObject *object)

object の所有権を返す。

setObjectOwnership() およびQJSEngine::ObjectOwnershipも参照

bool QJSEngine::registerModule(const QString &moduleName, const QJSValue &value)

QJSValue をモジュールとして登録する。この関数が呼ばれた後、moduleName をインポートするすべてのモジュールは、ファイルシステムからmoduleName をロードする代わりに、value の値をインポートします。

有効なQJSValue ならどれでも登録できますが、名前付きエクスポート(つまりimport { name } from "info" )はオブジェクトのメンバーとして扱われるため、デフォルトのエクスポートはQJSEngine の newXYZ メソッドのいずれかで作成する必要があります。

これにより、ファイルシステム上に存在しないモジュールをインポートできるため、スクリプト・アプリケーションはこれを使用して、Node.jsのような組み込みモジュールを提供できる。

成功すればtrue を、そうでなければfalse を返す。

注意: QJSValue value は、他のモジュールによって使用されるまで、呼び出されることも読み込まれることもない。つまり、評価するコードがないので、他のモジュールがこのモジュールをロードしようとして例外を投げるまで、エラーは発生しません。

警告 オブジェクトでないQJSValue から名前付きエクスポートにアクセスしようとすると、exception が発生する。

importModule()も参照のこと

void QJSEngine::setInterrupted(bool interrupted)

JavaScript の実行を中断または再有効化する。

interruptedtrue の場合、このエンジンで実行された JavaScript は直ちに中断され、interruptedfalse を指定してこの関数が再度呼び出されるまで、エラーオブジェクトが返されます。

この関数はスレッドセーフです。たとえば、JavaScript の無限ループを中断するために、別のスレッドからこの関数を呼び出すことができます。

isInterrupted()も参照してください

[static] void QJSEngine::setObjectOwnership(QObject *object, QJSEngine::ObjectOwnership ownership)

objectownership を設定する。

JavaScriptOwnership を持つオブジェクトは、たとえそのオブジェクトへの参照がなくても、 親が存在する限りガベージコレクションされません。

objectOwnership() およびQJSEngine::ObjectOwnershipも参照のこと

[since Qt 5.12] void QJSEngine::throwError(const QString &message)

与えられたmessage でランタイム・エラー(例外)をスローします。

このメソッドは、JavaScript のthrow() 式に対応する C++ です。こ れに よ り 、 C++ コ ー ド は実行時エ ラ ーをQJSEngine に報告で き る よ う にな り ます。 こ のため、 こ の メ ソ ッ ド は、 JavaScript 関数か らQJSEngine を通 じ て呼び出 さ れた C++ コ ー ド か ら のみ呼び出す必要があ り ます。

C++ から戻るとき、エンジンは通常の実行フローを中断し、事前に登録された次の例外ハンドラを、指定されたmessage を含むエラー・オブジェクトとともに呼び出します。エラー・オブジェクトは、JavaScriptの呼び出し側スタックの最上位コンテキストの場所を指します。具体的には、lineNumberfileNamestack のプロパティを持ちます。これらのプロパティはScript Exceptions で説明されています。

以下の例では、FileAccess.cppのC++メソッドが、readFileAsText() が呼び出された位置のqmlFile.qmlでエラーをスローしています:

// qmlFile.qml
function someFunction() {
  ...
  var text = FileAccess.readFileAsText("/path/to/file.txt");
}
// FileAccess.cpp
// Assuming that FileAccess is a QObject-derived class that has been
// registered as a singleton type and provides an invokable method
// readFileAsText()

QJSValue FileAccess::readFileAsText(const QString & filePath) {
  QFile file(filePath);

  if (!file.open(QIODevice::ReadOnly)) {
    jsEngine->throwError(file.errorString());
    return QString();
  }

  ...
  return content;
}

スローされたエラーをJavaScriptでキャッチすることも可能です:

// qmlFile.qml
function someFunction() {
  ...
  var text;
  try {
    text = FileAccess.readFileAsText("/path/to/file.txt");
  } catch (error) {
    console.warn("In " + error.fileName + ":" + "error.lineNumber" +
                 ": " + error.message);
  }
}

例外を記述するために、より具体的なランタイムエラーが必要な場合、throwError(QJSValue::ErrorType errorType, const QString &message)オーバーロードを使用することができます。

この関数はQt 5.12で導入されました。

Script Exceptionsも参照してください

[since 6.1] void QJSEngine::throwError(const QJSValue &error)

この関数は throwError() をオーバーロードしたものである。

事前に構築されたランタイムerror (例外)をスローします。これにより、newErrorObject()を使用してエラーを作成し、必要に応じてカスタマイズすることができます。

この関数は Qt 6.1 で導入されました。

Script Exceptions およびnewErrorObject()も参照してください

[since Qt 5.12] void QJSEngine::throwError(QJSValue::ErrorType errorType, const QString &message = QString())

この関数はthrowError()をオーバーロードする。

与えられたerrorTypemessage でランタイムエラー(例外)をスローします。

// Assuming that DataEntry is a QObject-derived class that has been
// registered as a singleton type and provides an invokable method
// setAge().

void DataEntry::setAge(int age) {
  if (age < 0 || age > 200) {
    jsEngine->throwError(QJSValue::RangeError,
                         "Age must be between 0 and 200");
  }
  ...
}

この関数は Qt 5.12 で導入されました。

Script ExceptionsnewErrorObject()も参照してください

template <typename T> QJSManagedValue QJSEngine::toManagedValue(const T &value)

与えられたvalueQJSManagedValue を作成する。

fromManagedValue() およびcoerceValue()も参照

template <typename T> QJSPrimitiveValue QJSEngine::toPrimitiveValue(const T &value)

与えられたvalueQJSPrimitiveValue を作成する。

QJSPrimitiveValue は int、bool、double、QString 、および JavaScript のnullundefined に相当するものしか保持できないので、それ以外の型を渡すと、値は積極的に強制されます。

fromPrimitiveValue() およびcoerceValue()も参照

template <typename T> QJSValue QJSEngine::toScriptValue(const T &value)

与えられたvalueQJSValue を作成する。

fromScriptValue() およびcoerceValue()も参照 ください。

関連する非会員

QJSEngine *qjsEngine(const QObject *object)

object に関連付けられたQJSEngine があればそれを返す。

この関数は、QObject を JavaScript 環境に公開し、プログラムの後半でアクセスを再開したい場合に便利です。QJSEngine::newQObject() から返されたラッパーを保持する必要はありません。

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