QMLオブジェクトの型

QML オブジェクト型とは、QML オブジェクトをインスタンス化するための型です。

構文的には、QML オブジェクト型はオブジェクトを宣言するための型であり、型名の後に中括弧で オブジェクトの属性を囲みます。これは同じようには使えない値型とは異なります。例えば、Rectangle はQMLのオブジェクト型です。Rectangle 型のオブジェクトを生成するために使用することができます。intbool のようなプリミティブ型はオブジェクトではなく、単純なデータ型 を保持するために使われます。

カスタムのQMLオブジェクト型は、「QMLオブジェクト型の定義としての文書」で 説明したように、型を定義した.qmlファイルを作成することで定義することもできますし、 「C++からQML型を定義する」で説明したように、C++からQML型を定義し、その型をQMLエンジンに登録することでも定義することができます。どちらの場合も、QMLファイルの中でQMLオブジェクト型として宣言するためには、型名は大文字で始まらなければならないことに注意してください。

C++ と QML の統合方法についての詳細は、C++ と QML の統合の概要のページをご参照ください。

QML からオブジェクト型を定義する

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

プラグイン作成者やアプリケーション開発者は、QML ドキュメントとして定義された型 を提供することができます。QML ドキュメントは、QML インポートシステムから見える形で、ファイル名から拡張子 を除いた名前で定義されます。

従って、"MyButton.qml "という名前のQMLドキュメントが存在する場合、そのドキュメントは "MyButton "という型を定義し、QMLアプリケーションで使用することができます。

QMLドキュメントの定義方法やQML言語の構文については、QMLドキュメントを参照してください。QML言語とQMLドキュメントの定義方法に慣れたら、QMLドキュメントの中で再利用可能な独自のQML型を定義し、使用する方法を説明したドキュメントを参照してください。

詳しくは「QMLドキュメントによるオブジェクト型の定義」をご覧ください。

コンポーネントによる匿名型の定義

QMLの中でオブジェクト型を定義するもう一つの方法として、Component 型を使う方法があります。これによって、.qml ファイル内の別のドキュメントを使用する代わりに、QML ドキュメント内で型をインライン定義することができます。

Item {
    id: root
    width: 500; height: 500

    Component {
        id: myComponent
        Rectangle { width: 100; height: 100; color: "red" }
    }

    Component.onCompleted: {
        myComponent.createObject(root)
        myComponent.createObject(root, {"x": 200})
    }
}

myComponent オブジェクトは基本的に無名型を定義しており、Component::createObject を使ってインスタンス化することで、この無名型のオブジェクトを作成することができます。

インラインコンポーネントは通常のトップレベルコンポーネントと同じ特徴を持ち、 QMLドキュメントと同じimport

Component オブジェクト宣言は、それぞれ独自のコンポーネントスコープを作成することに注意してください。Component オブジェクト宣言内で使用され、参照されるid値は、そのスコープ内で一意でなければなりませんが、インラインコンポーネントが宣言されたドキュメント内で一意である必要はありません。つまり、myComponent オブジェクト宣言で宣言されたRectangle は、root というid を持つことができ、同じドキュメント内のItem オブジェクトに対して宣言されたroot と衝突することはありません。

詳細については、「スコープと命名解決」を参照してください。

C++ からのオブジェクト型の定義

C++プラグイン作成者とアプリケーション開発者は、Qt Qml モジュールが提供するAPIを通じて、C++で定義された型を登録することができます。さまざまな登録関数があり、それぞれ異なるユースケースを満たすことができます。これらの登録関数や、C++のカスタム型をQMLに公開する方法については、C++からQMLの型を定義する を参照してください。

QMLの型システムは、インポート、プラグイン、拡張機能が既知のインポートパスにインス トールされていることを前提としています。プラグインはサードパーティの開発者によって提供され、クライアントアプリケーションの開発者によって再利用されます。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.