このページでは

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

Qtは、JavaScriptによるアプリケーションのスクリプト化をサポートしています。以下のガイドおよびリファレンスでは、JavaScriptとQtを用いたプログラミングに関するさまざまな側面について解説しています。

スクリプト用クラス

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

QJSEngine

JavaScriptコードを評価するための環境

QJSPrimitiveValue

JavaScriptのセマンティクスに基づくプリミティブ型を操作します

QJSValue

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

QJSValueIterator

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

基本的な使い方

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

QJSEngine engine;
qDebug() << "the magic number is:" << engine.evaluate("1 + 2").toNumber();

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

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

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

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

QObjectをスクリプトエンジンから利用可能にする

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

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

以下は、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++オブジェクトには、追加のセキュリティ対策なしにアクセス可能となります。

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