識別モジュール

識別モジュールとは、QMLエンジンにインストールされ、ドット付き識別子文字列の URIによって識別可能なモジュールのことです。この識別子は、モジュールがqmldir ファイルで指定する必要があります。これにより、モジュールがローカルのファイルシステムのどこにあっても、 一意な識別子でインポートすることができます。

識別されたモジュールをインポートする場合、引用符で囲まれていない識別子が使われ、オプションでバージョン番号が付けられます:

import QtQuick
import com.nokia.qml.mymodule 1.0

識別されたモジュールは、QMLエンジンが検出するために、インポートパスにインス トールされていなければなりません。

構文的には、URI のドット区切りの各セグメントは整形式の ECMAScript Identifier Name でなければならない。これは、例えば、セグメントが数字で始まったり、-(マイナス)文字が含まれていたりしてはならないことを意味する。URIはディレクトリ名に変換されるので、ラテンアルファベットの英数字、アンダースコア、ドットに制限する必要があります。

ローカルにインストールされた特定モジュール

QML および/または C++ ファイルのディレクトリは、モジュールのメタデータを含むqmldir ファイルがQML のインポートパスにインストールされていれば、特定モジュールとして共有することができます。ローカルファイルシステム上のQMLファイルであれば、モジュールのURIを参照するimport文により、このディレクトリをモジュールとしてインポートすることができ、モジュールが定義するQMLオブジェクトタイプや JavaScriptリソースを利用することができるようになります。

モジュールのqmldir ファイルは、URI のドット付き識別子文字列を反映したimport パス内のディレクトリ構造に存在しなければなりません。例えば、モジュールcom.mycompany.mymoduleqmldir ファイルは、インポートパスのどこかのサブパスcom/mycompany/mymodule/qmldir に配置されなければならない。

異なるバージョンのモジュールをそれ自身のサブディレクトリに格納することが可能です。たとえば、あるモジュールのバージョン 2.1 をcom/mycompany/mymodule.2/qmldir またはcom/mycompany/mymodule.2.1/qmldir の下に置くことができます。 エンジンは自動的に、最も適合するモジュールをロードします。

別の方法として、qmldirファイル自体に異なるタイプのバージョン管理を定義することもできますが、この場合、モジュールの更新が難しくなります(更新手順の一部として、qmldir ファイルのマージが必要なため)。

次のようなQMLプロジェクトのディレクトリ構造を考えてみましょう。myapp というトップレベルのディレクトリの下に、mycomponents というサブディレクトリに共通のUIコンポーネントがあり、main というサブディレクトリにメインのアプリケーションコードがあります:

myapp
    |- mycomponents
        |- CheckBox.qml
        |- DialogBox.qml
        |- Slider.qml
    |- main
        |- application.qml

mycomponents ディレクトリを識別されたモジュールとして利用できるようにするには、そのディレクトリに、モジュール識別子を定義し、モジュールによって利用可能になるオブジェクト・タイプを記述したqmldir ファイルを含める必要があります。例えば、CheckBoxDialogBoxSlider のタイプをモジュールのバージョン1.0で利用できるようにするには、qmldir ファイルに次のように記述します:

module myapp.mycomponents
CheckBox 1.0 CheckBox.qml
DialogBox 1.0 DialogBox.qml
Slider 1.0 Slider.qml

さらに、インポートパスの qmldir ファイルの場所は、モジュールのドット付き識別子文字列と一致しなければなりません。つまり、トップレベルmyapp ディレクトリがC:\qml\projects にあり、モジュールが "myapp.mycomponents" として識別されなければならないとします。この場合

  • C:\qml\projects のパスをインポートパスに追加する。
  • qmldir ファイルは以下の場所にあります。C:\qml\projects\myapp\mycomponents\qmldir

これが完了すると、ローカルファイルシステム上の任意の場所にある QML ファイルは、その URI と適切なバージョンを参照することで、モジュールをインポートすることができます:

import myapp.mycomponents 1.0

DialogBox {
    CheckBox {
        // ...
    }
    Slider {
        // ...
    }
}

リモートでインストールされた識別モジュール

識別されたモジュールはネットワークリソースとしてもアクセス可能です。先ほどの例では、C:\qml\projects ディレクトリがhttp://www.some-server.com/qml/projects としてホストされ、この URL が QML のインポートパスに追加されていれば、まったく同じ方法でモジュールをインポートすることができます。

ネットワーク経由でモジュールをインポートする場合、モジュールが提供する QML と JavaScript のリソースにしかアクセスできないことに注意してください。

識別されたモジュールのセマンティクス

識別されたモジュールは、QMLエンジンによって以下のことが保証されます:

  • 他のモジュールはそのモジュールの名前空間内の型を変更したり上書きしたりできない。
  • 他のモジュールはモジュールの名前空間に新しい型を登録することができない。
  • クライアントによる型名の使用は、指定されたバージョニングとインポートの順序によって、与えられた型定義に決定論的に解決されます。

これにより、モジュールを使用するクライアントは、モジュールで定義されたオブジェクト型がモジュール作者の文書どおりに動作することを保証することができます。

識別されたモジュールにはいくつかの制約があります:

  • 識別されたモジュールはQMLのインポートパスにインストールされなければならない。
  • module identifier ディレクティブで指定されたモジュール識別子は、 モジュールのインストールパス(QML のインポートパスからの相対パスで、 ディレクトリの区切り文字はピリオド文字に置き換えられます)と一致しなければなりません。
  • モジュールはその型をモジュール識別子の型名前空間に登録しなければなりません。
  • モジュールは他のモジュールの名前空間に型を登録してはいけません。

例えば、識別されたモジュールが$QML_IMPORT_PATH/ExampleModule にインストールされる場合、モジュール識別子ディレクティブはこうでなければなりません:

module ExampleModule

厳密なモジュールが$QML_IMPORT_PATH/com/example/CustomUi にインストールされている場合、モジュール識別子ディレクティブは次のようにしなければなりません:

module com.example.CustomUi

クライアントは、次の import 文で上記のモジュールをインポートすることができます:

import com.example.CustomUi

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