このページでは

QMLの型システム

QMLドキュメント内のオブジェクト階層の定義で使用できる型は、さまざまなソースに由来する可能性があります。具体的には以下のものが挙げられます:

  • QML言語によってネイティブに提供されるもの
  • QMLモジュールによってC++経由で登録されたもの
  • QMLモジュールによってQMLドキュメントとして提供されるもの

さらに、アプリケーション開発者は、C++ 型を直接登録するか、QML ドキュメント内で再利用可能なコンポーネントを定義してインポートすることで、独自の型を提供することができます。

型定義の出典がどこであれ、エンジンはそれらの型のプロパティおよびインスタンスに対して型安全性を保証します。

QML オブジェクト型

QML オブジェクト型とは、QML オブジェクトをインスタンス化できる型のことです。QML オブジェクト型は `QtObject` から派生しており、QML モジュールによって提供されます。アプリケーションはこれらのモジュールをインポートして、モジュールが提供するオブジェクト型を使用することができます。QtQuick モジュールは、QML でユーザーインターフェースを作成するために必要な、最も一般的なオブジェクト型を提供しています。

最後に、すべてのQMLドキュメントは暗黙的にQMLオブジェクト型を定義しており、これは他のQMLドキュメントで再利用可能です。オブジェクト型に関する詳細については、QML型システムのオブジェクト型に関するドキュメントを参照してください。

QMLの値型

QML 言語は、整数、倍精度浮動小数点数、文字列、ブール値など、さまざまなプリミティブ型を組み込みでサポートしています。オブジェクトはこれらの型のプロパティを持つことができ、また、これらの型の値をオブジェクトのメソッドへの引数として渡すことができます。

値型に関する詳細については、QML 値型のドキュメントを参照してください。

QML シーケンス型

シーケンス型は、値やオブジェクトのシーケンスを格納するために使用できます。

シーケンス型に関する詳細については、QML型システムのシーケンス型に関するドキュメントを参照してください。

列挙型

QML では、列挙型は型の特別なプロパティとして扱われます。

列挙型に関する詳細については、QML 列挙型のドキュメントを参照してください。

シングルトン型

QML はシングルトン型をサポートしており、これにより、各 QML エンジンに 1 つのインスタンスのみが存在する型を定義することができます。シングルトン型は、アプリケーション全体にわたる状態や機能を提供するのに役立ちます。

詳細については、「QML におけるシングルトン」を参照してください。

アタッチされた型

アタッチされたプロパティやシグナルハンドラを使用すると、型は他のオブジェクトにアタッチできる追加のプロパティやシグナルを提供できます。これは、QMLオブジェクトにコンテキスト情報を追加するための強力なメカニズムです。

詳細については、「QMLのアタッチド型」を参照してください。

QML ネームスペース

QML ネームスペースを使用すると、C++ ネームスペースの列挙型を公開できます。

名前空間に関する詳細な情報については、QML 型システムの名前空間に関するドキュメントを参照してください。

JavaScript 型

QML エンジンは、JavaScript オブジェクトおよび配列をサポートしています。汎用型 `var ` を使用することで、あらゆる標準的な JavaScript 型を作成・格納できます。

たとえば、以下の例に示すように、標準のDate 型やArray 型を利用できます。

import QtQuick

Item {
    property var theArray: []
    property var theDate: new Date()

    Component.onCompleted: {
        for (var i = 0; i < 10; i++)
            theArray.push("Item " + i)
        console.log("There are", theArray.length, "items in the array")
        console.log("The time is", theDate.toUTCString())
    }
}

詳細については、「QMLドキュメントにおけるJavaScript式」を参照してください。

C++ との統合

QMLとC++間のデータ型変換

QMLとC++を統合する場合、2つの環境間でデータをやり取りする必要がよくあります。QMLエンジンは、一般的なデータ型についてQMLとC++の型間の自動変換を提供しますが、カスタム型については明示的な登録が必要です。

詳細については、「QML と C++ 間のデータ型変換」を参照してください。

C++ から QML オブジェクトを操作する

C++ コードは、QML エンジンから QML オブジェクトへの参照を取得することで、それらにアクセスして操作することができます。これにより、C++ コードは QML オブジェクトのプロパティの読み書き、メソッドの呼び出し、およびシグナルへの接続を行うことができます。

詳細については、「C++ から QML オブジェクトを操作する」を参照してください。

C++ からの JavaScript 値との統合

QMLエンジンは、QJSValue および関連クラスを使用してJavaScript値を表現します。これにより、C++コードはJavaScriptオブジェクト、関数、およびプリミティブ値を扱うことができます。これにより、C++コードとJavaScriptコード間のシームレスな統合が可能になります。

詳細については、「C++ からの JavaScript 値との統合」を参照してください。

コンテキストプロパティを使用したQMLへのC++オブジェクトの埋め込み

コンテキストプロパティの使用は避けるべきです。詳細については、「コンテキストプロパティを使用した C++ オブジェクトの QML への埋め込み」を参照してください。

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