QML文書

QML ドキュメントは、QML ドキュメント構文に従った文字列です。ドキュメントは QML のオブジェクトタイプを定義します。ドキュメントは通常、ローカルまたはリモートに保存された".qml" ファイルから読み込まれます。ドキュメントで定義されたオブジェクト型のインスタンスは、QMLコードではComponent 、C++ではQQmlComponent 。また、オブジェクトの型が特定の型名でQMLの型システムに明示的に公開されている場合、その型を他の文書のオブジェクト宣言で直接使用することもできます。

ドキュメントの中で再利用可能なQMLオブジェクト型を定義できることは、クライアントがモジュール化された可読性・保守性の高いコードを書くことを可能にする重要な機能です。

Qt 5.4 以降、ドキュメントは".ui.qml" という拡張子を持つこともできます。QMLエンジンはこれらのファイルを標準の.qmlファイルと同様に扱い、拡張子の.ui の部分は無視します。Qt Design Studio はこれらのファイルをUIファイルとして扱います。このファイルにはQML言語機能のサブセットのみを含めることができます。

QMLドキュメントの構造

QML文書は、importsセクションとオブジェクト宣言セクションの2つのセクションから構成されます。ドキュメントの imports セクションには、ドキュメントが使用できる QML オブジェクトタイプや JavaScript リソースを定義する import 文が含まれています。オブジェクト宣言セクションでは、ドキュメントで定義されたオブジェクトタイプをインスタンス化する際に作成されるオブジェクトツリーを定義します。

簡単なドキュメントの例を以下に示します:

import QtQuick 2.0

Rectangle {
    width: 300
    height: 200
    color: "blue"
}

詳しくは「QMLドキュメントの構造」を参照してください。

QML言語の構文

ドキュメントのオブジェクト宣言部では、適切なQML 構文を用いて有効なオブジェクト階層を指定しなければなりません。オブジェクト宣言には、独自のオブジェクト属性を指定することができます。オブジェクトのメソッド属性は JavaScript の関数として指定することができ、 オブジェクトのプロパティ属性にはプロパティ結合式を指定することができます。

有効な構文についての詳細はQML の構文についてのドキュメントを、QML と JavaScript の統合についての詳細は QML と JavaScript の統合についてのドキュメントを参照してください。

QMLドキュメントによるオブジェクト型の定義

前の節で簡単に説明したように、ドキュメントは暗黙のうちにQMLのオブジェクト型を定義します。QMLの基本原則の一つは、オブジェクト型を定義し、それを再利用することです。これにより、QMLコードの保守性が向上し、オブジェクト階層宣言の可読性が向上し、UI定義とロジック実装の分離が促進されます。

次の例では、クライアント開発者がButton 型をファイル内のドキュメントで定義しています:

// Button.qml
import QtQuick

Rectangle {
    width: 100; height: 100
    color: "red"

    MouseArea {
        anchors.fill: parent
        onClicked: console.log("Button clicked!")
    }
}

Button 型はアプリケーションで使用できます:

// application.qml
import QtQuick

Column {
    Button { width: 50; height: 50 }
    Button { x: 50; width: 100; height: 50; color: "blue" }
    Button { width: 50; height: 50; radius: 8 }
}

このトピックの詳細については、ドキュメント内のオブジェクト・タイプの定義に関するドキュメントを参照してください。

リソースロードとネットワークの透明性

QMLはネットワーク透過的であるということが重要です。アプリケーションはローカルパスからドキュメントを読み込むのと同様に、リモートパスからドキュメントを読み込むことができます。実際、url のプロパティには、リモートまたはローカルの URL を指定することができ、QMLエンジンはネットワーク通信を処理します。

インポートにおけるネットワークの透過性については、「ネットワークの透過性」のドキュメントを参照してください。

スコープと命名解決

複数のオブジェクトが定義され、異なるオブジェクトが同じ名前のプロパティを持つ可能性があるため、QMLでは事前に定義されたシンボル解決セマンティクスを定義する必要があります。スコープとシンボル解決に関する詳細な情報については、スコープとシンボル解決のページを参照してください。

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