使用例 - QMLにJavaScriptを組み込む

JavaScriptのコードをQMLに組み込むことで、UIロジックや命令制御、その他の利点を簡単に得ることができます。

プロパティ値にJavaScript式を使う

QMLではJavaScriptの式をバインディングとして使用することができます。例えば

Item {
    width: Math.random()
    height: width < 100 ? 100 : (width + 50) /  2
}

Math.random()のような関数呼び出しは、引数が変化しない限り再評価されないことに注意してください。そのため、Math.random()へのバインディングは1つの乱数となり再評価されませんが、幅が他の方法で変更された場合、高さのバインディングはそれを考慮して再評価されます。

QMLにおけるJavaScript関数の追加

以下の例のように、JavaScriptの関数をQMLのアイテム上で宣言することができます。これにより、アイテムIDを使ってメソッドを呼び出すことができます。

import QtQuick

Item {
    id: container
    width: 320
    height: 480

    function randomNumber() {
        return Math.random() * 360;
    }

    function getNumber() {
        return container.randomNumber();
    }

    TapHandler {
        // This line uses the JS function from the item
        onTapped: rectangle.rotation = container.getNumber();
    }

    Rectangle {
        color: "#272822"
        width: 320
        height: 480
    }

    Rectangle {
        id: rectangle
        anchors.centerIn: parent
        width: 160
        height: 160
        color: "green"
        Behavior on rotation { RotationAnimation { direction: RotationAnimation.Clockwise } }
    }

}

JavaScriptファイルの利用

JavaScriptファイルは、QMLファイルからロジックを抽象化するために使うことができます。これを行うには、まず.jsファイルに関数を記述します。

// myscript.js
function getRandom(previousValue) {
    return Math.floor(previousValue + Math.random() * 90) % 360;
}

そして、そのファイルを、その関数を使用する必要のある.qmlファイルにインポートします。

import QtQuick
import "myscript.js" as Logic

Item {
    width: 320
    height: 480

    Rectangle {
        color: "#272822"
        width: 320
        height: 480
    }

    TapHandler {
        // This line uses the JS function from the separate JS file
        onTapped: rectangle.rotation = Logic.getRandom(rectangle.rotation);
    }

    Rectangle {
        id: rectangle
        anchors.centerIn: parent
        width: 160
        height: 160
        color: "green"
        Behavior on rotation { RotationAnimation { direction: RotationAnimation.Clockwise } }
    }

}

QMLで使用されているJavaScriptエンジンの詳細や、ブラウザJSとの違いについては、QMLドキュメントにおけるJavaScript表現についてのドキュメントを参照してください。

©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。