アプリケーションをスクリプト化する

Qt では JavaScript を使ったアプリケーションのスクリプティングをサポートしています。以下のガイドとリファレンスは、JavaScript と Qt を使ったプログラミングの側面をカバーしています。

スクリプトクラス

以下のクラスは Qt アプリケーションにスクリプト機能を追加します。

QJSEngine

JavaScript コードを評価する環境

QJSPrimitiveValue

JavaScript のセマンティクスでプリミティブ型を操作する

QJSValue

Qt/JavaScript データ型のコンテナとして動作する

QJSValueIterator

QJSValue用のJavaスタイルのイテレータ

基本的な使い方

スクリプト・コードを評価するには、QJSEngine を作成し、評価するスクリプト・コード(テキスト)を引数として渡して evaluate() 関数を呼び出します。

QJSEngineエンジンを使用します;qDebug() << "the magic number is:" << engine.evaluate("1 + 2").toNumber();

戻り値は評価結果(QJSValue オブジェクトとして表現される)である。これは標準的な C++ や Qt の型に変換することができる。

カスタムプロパティは、スクリプトエンジンに登録することで、スクリプトで利用できるようになります。これは、スクリプトエンジンのグローバルオブジェクトのプロパティを設定することで最も簡単に行うことができます:

engine.globalObject().setProperty("foo", 123);qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber();

これにより、プロパティがスクリプト環境に配置され、スクリプト・コードから利用できるようになります。

Qオブジェクトをスクリプト・エンジンで使用可能にする

QObject ベースのインスタンスは、スクリプトで使用できるようにすることができます。

QObjectQJSEngine::newQObject() 関数に渡すと、QObject のシグナル、スロット、プロパティ、子オブジェクトをスクリプトで利用できるようにするための Qt Script ラッパーオブジェクトが作成されます。

ここでは、QObject のサブクラスのインスタンスを、"myObject" という名前でスクリプトコードから利用できるようにする例を示します:

QJSEngine engine;
QObject *someObject = new MyObject;
QJSValue objectValue = engine.newQObject(someObject);
engine.globalObject().setProperty("myObject", objectValue);

これは、スクリプト環境にmyObject というグローバル変数を作成します。この変数は、基礎となる C++ オブジェクトへのプロキシとして機能します。スクリプト変数の名前は何でもよいことに注意してください。つまり、QObject::objectName() に依存するものではありません。

アプリケーション・セキュリティへの影響

JavaScriptによるアプリケーションのスクリプティングのセキュリティモデルは、C++コードと同じモデルに従います:ユーザーは、Qtアプリケーションをインストールするのと同じように、信頼できるスクリプトをインストールして実行します。

ユーザーの信頼を維持するために、アプリケーション開発者は任意のJavaScriptコードを評価すべきではありません。JavaScriptエンジンのサンドボックスは意味的な障壁に過ぎません。スクリプトはアプリケーションの残りの部分と同じプロセス、同じ権限で評価され、同じメモリを共有します。結果として、スクリプトにさらされる C++ オブジェクトは、追加のセキュリティ・ガードなしでアクセス可能です。

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