このページでは

WorkerScript QML Type

Qt Quick アプリケーションでスレッドを使用できるようにします。詳細...

Import Statement: import QtQml.WorkerScript

プロパティ

信号

方法

詳細な説明

WorkerScript を使用して、新しいスレッドで操作を実行します。これは、メインの GUI スレッドがブロックされないように、バックグラウンドで操作を実行するのに役立ちます。

sendMessage() およびonMessage() ハンドラを使用することで、新しいスレッドと親スレッドの間でメッセージをやり取りできます。

例:

import QtQuick

Rectangle {
    width: 300; height: 300

    Text {
        id: myText
        text: 'Click anywhere'
    }

    WorkerScript {
        id: myWorker
        source: "script.mjs"

        onMessage: (messageObject)=> myText.text = messageObject.reply
    }

    MouseArea {
        anchors.fill: parent
        onClicked: (mouse)=> myWorker.sendMessage({ 'x': mouse.x, 'y': mouse.y })
    }
}

上記のワーカースクリプトでは、新しいスレッドで実行される処理を扱うJavaScriptファイル「script.mjs」を指定しています。以下はscript.mjs のコードです:

WorkerScript.onMessage = function(message) {
    // ... long-running operations and calculations are done here
    WorkerScript.sendMessage({ 'reply': 'Mouse is at ' + message.x + ',' + message.y })
}

ユーザーが矩形内の任意の場所をクリックすると、sendMessage() が呼び出され、script.mjs 内のWorkerScript.onMessage() ハンドラがトリガーされます。これにより返信メッセージが送信され、myWorker のonMessage() ハンドラによって受信されます。

この例では、拡張子が「.mjs」であるため、ECMAScript モジュールであるスクリプトを使用しています。このスクリプトは、import 文を使用して他のモジュールの機能にアクセスでき、JavaScript の厳格モードで実行されます。

一方、ワーカースクリプトの拡張子が「.js」の場合は、プレーンな JavaScript 文を含むものとみなされ、非厳格モードで実行されます。

注:各 WorkerScript 要素は、完全な分離とスレッドセーフ性を確保するために、個別の JavaScript エンジンをインスタンス化します。その結果、お使いの環境にとってメモリ消費量が高くなりすぎる場合は、WorkerScript 要素の共有を検討してください。

制限事項

WorkerScript.onMessage() 関数は別のスレッドで実行されるため、JavaScriptファイルはメインのQMLエンジンとは別のコンテキストで評価されます。 つまり、QMLにインポートされる通常のJavaScriptファイルとは異なり、上記の例のscript.mjs は、QMLアイテムのプロパティ、メソッド、その他の属性にアクセスできず、QQmlContext を通じてQMLオブジェクトに設定されたコンテキストプロパティにもアクセスできません。

さらに、ワーカースクリプトとの間でやり取りできる値の型には制限があります。詳細については、sendMessage() のドキュメントを参照してください。

プレーンな JavaScript ソースであるワーカースクリプトでは、.import構文を使用することはできません。ECMAScript モジュールであるスクリプトでは、import および export ステートメントを自由に使用できます。

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

ready : bool [read-only]

これは、WorkerScript が初期化済みであるか、WorkerScript.sendMessage() を介してメッセージを受信できる状態にあるかどうかにかかわらず当てはまります。

source : url

ここには、スレッド化された操作用のWorkerScript.onMessage() ハンドラを実装するJavaScriptファイルのURLが格納されます。

URLのファイル名部分が「.mjs」で終わる場合、そのスクリプトはECMAScriptモジュールとして解析され、厳格モードで実行されます。それ以外の場合は、通常のスクリプトとして扱われます。

Signal ドキュメント

message(jsobject msg)

このシグナルは、別のスレッドにあるワーカースクリプトから、sendMessage() の呼び出しを通じてメッセージ `msg ` を受信した際に発せられます。

注: 対応するハンドラは onMessage です。

メソッドのドキュメント

void sendMessage(jsobject message)

指定されたmessage を、別のスレッドにあるワーカースクリプトハンドラに送信します。そのワーカースクリプトハンドラは、onMessage()ハンドラを通じてこのメッセージを受け取ることができます。

message オブジェクトには、以下の型の値のみを含めることができます:

  • boolean、number、string
  • JavaScriptオブジェクトおよび配列
  • ListModelオブジェクト(QObject に含まれるその他の型*は許可されません)

すべてのオブジェクトおよび配列は、message にコピーされます。ListModel オブジェクトを除き、message で渡されたオブジェクトに対して別のスレッドが行った変更は、元のオブジェクトには反映されません。

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