QMLドキュメントディレクトリのインポート
QML ファイルのローカルディレクトリは、追加の設定や構成を行うことなくインポートできます。QML ファイルのリモートディレクトリもインポートできますが、その場合はディレクトリ一覧ファイル `qmldir ` が存在する必要があります。 ローカルディレクトリには、そのディレクトリをインポートするクライアントに提供すべき型名を定義し、インポーターが利用できるようにすべき JavaScript リソースを指定するために、オプションでディレクトリ一覧ファイル `qmldir ` を含めることができます。
Qt は、インポートされたディレクトリ内のすべてのファイルが信頼できるソースからのものであると想定しています。
ローカルディレクトリのインポート
ローカルファイルシステム上の任意の QML ファイルは、そのディレクトリの絶対パスまたは相対ファイルシステムパスを参照する import 文を使用してローカルディレクトリをインポートすることができ、そのファイルはそのディレクトリ内で定義されたオブジェクトタイプを使用できるようになります。
QML Runtime は、インポートされたディレクトリからオプションのディレクトリ一覧ファイル `qmldir ` を読み取り、QML および C++ で定義された利用可能な型を検出します。`qmldir ` ファイルは、QML で定義された型の名前と、C++ で定義された型を含むプラグインのパスを指定します。
qmldir ファイルが存在する場合、QML ファイルはそこに指定された型名で利用可能になります。存在しない場合は、QML ドキュメントのファイル名から派生した型名で利用可能になります。ディレクトリにqmldir ファイルが指定されていない場合、大文字で始まり「.qml」で終わるファイル名のみが型として公開されます。
QML Runtimeは、qmldir ファイルにリストされているすべてのプラグインをロードし、C++から公開されているすべての型を検索します。
ディレクトリからのインポートは、モジュールからのインポートよりも優先順位が低くなります。同じ名前が、同じ名前空間にインポートされているモジュールとディレクトリの両方で定義されている場合、モジュールの型のみが利用可能になります。
例
次の QML プロジェクトのディレクトリ構造を考えてみましょう。最上位ディレクトリ `myapp` の下には、`mycomponents` という名前のサブディレクトリに一連の一般的な UI コンポーネントがあり、`main` という名前のサブディレクトリにメインのアプリケーションコードがあります。具体的には次のようになります。
myapp
|- mycomponents
|- CheckBox.qml
|- DialogBox.qml
|- Slider.qml
|- main
|- application.qmlmain/application.qml ファイルでは、mycomponents ディレクトリへの相対パスを使用してそのディレクトリをインポートでき、これにより、そのディレクトリ内で定義されたQMLオブジェクト型を使用できるようになります:
ディレクトリは修飾付きローカル名前空間にインポートすることも可能です。その場合、そのディレクトリで提供される型を使用する際には、修飾を付ける必要があります:
import "../mycomponents" as MyComponents
MyComponents.DialogBox {
// ...
}ローカルディレクトリをインポートできる機能は、アプリケーション内のコンポーネントセットやアプリケーションのプロトタイピングなどの場合に便利です。ただし、そのようなモジュールをインポートするコードでは、モジュールディレクトリが別の場所に移動した場合、関連するimport ステートメントを更新する必要があります。代わりにQMLモジュールを使用すれば、この問題を回避できます。インストールされたモジュールは、ファイルシステムのパスではなく一意の識別子文字列でインポートされるためです。
暗黙的なインポート
QMLドキュメントが置かれているディレクトリは自動的にインポートされます。"." などを明示的にインポートする必要はありません。
注: QMLドキュメントが属するモジュールを指定する`qmldir`ファイルは、QMLドキュメント自体と同じディレクトリに存在するようにしてください 。 そうしないと、暗黙的なインポートの対象が、ドキュメントが属するモジュールとは異なるものになってしまいます。その結果、例えば、あるQMLドキュメントが、モジュールのコンテキストではシングルトンであっても、暗黙的なインポートのコンテキストではシングルトンではない、といった状況が生じ得ます。これはよくある間違いの原因となります。
リモートにあるディレクトリ
QML ファイルのディレクトリには、qmldir ファイルが含まれている場合、リモートからインポートすることもできます。
注:これは 、QMLドキュメントが格納されているディレクトリの暗黙的なインポートについても同様です。QMLドキュメントをリモートから読み込む場合、明示的なディレクトリインポート文が含まれていなくても、qmldirファイルを追加する必要があります。そうしないと、QMLドキュメント同士が互いに認識できなくなります。
たとえば、前の例の `myapp ` ディレクトリが「http://www.my-example-server.com」でホストされており、`mycomponents ` ディレクトリに次のように定義された `qmldir ` ファイルが含まれている場合:
CheckBox CheckBox.qml
DialogBox DialogBox.qml
Slider Slider.qmlその場合、リモート上のmycomponents ディレクトリへの URL を使用して、そのディレクトリをインポートできます:
import "http://www.my-example-server.com/myapp/mycomponents"
DialogBox {
CheckBox {
// ...
}
Slider {
// ...
}
}なお、ファイルがネットワーク経由でディレクトリをインポートする場合、そのディレクトリ内にある `qmldir ` ファイルで指定された QML ファイルおよび JavaScript ファイルにのみアクセスできることに注意してください。
警告: リモートサーバーからディレクトリをインポートする場合 、悪意のあるコードが読み込まれるのを防ぐため、開発者は常に信頼できるソースからのディレクトリのみを読み込むよう注意する必要があります。
ディレクトリ一覧の qmldir ファイル
ディレクトリ一覧のqmldir ファイルは、モジュール定義のqmldirファイルとは明らかに異なります。ディレクトリ一覧のqmldir ファイルを使用すると、QMLドキュメントのグループを迅速かつ簡単に共有できますが、ドキュメントで定義されたQMLオブジェクト型が登録される型名前空間を定義するものではなく、また、それらのQMLオブジェクト型のバージョン管理もサポートしていません。
ディレクトリ一覧qmldir ファイルの構文は次のとおりです:
| コマンド | 構文 | 説明 |
|---|---|---|
| オブジェクト型の宣言 | <TypeName> <FileName> | オブジェクト型の宣言を行うことで、QMLドキュメントを指定された<TypeName> で公開できるようになります。例: |
| 内部オブジェクト型の宣言 | internal <TypeName> <FileName> | 内部オブジェクト型の宣言を行うと、QMLドキュメントを型として登録することができ、その型は、import ディレクティブに含まれる他のQMLドキュメントからのみ利用可能になります。この内部型は、そのディレクトリをインポートするクライアントからは利用できません。 例: |
| JavaScriptリソース宣言 | <識別子> <ファイル名> | JavaScriptリソース宣言により、指定された識別子を介してJavaScriptファイルを公開することができます。 例: |
ローカルファイルシステムのディレクトリには、オプションでqmldir ファイルを含めることができます。これにより、エンジンは、そのディレクトリをインポートするクライアントに対して、特定のQML型のみを公開できるようになります。また、そのディレクトリ内のJavaScriptリソースは、qmldir ファイルで宣言されていない限り、クライアントには公開されません。
© 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.