QQmlComponent Class

QQmlComponent クラスは QML コンポーネントの定義をカプセル化します。詳細...

ヘッダ #include <QQmlComponent>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake QT += qml
QML で Component
継承: QObject

パブリックな型

enum CompilationMode { PreferSynchronous, Asynchronous }
enum Status { Null, Ready, Loading, Error }

プロパティ

公共機能

QQmlComponent(QQmlEngine *engine, QObject *parent = nullptr)
QQmlComponent(QQmlEngine *engine, const QString &fileName, QObject *parent = nullptr)
QQmlComponent(QQmlEngine *engine, const QUrl &url, QObject *parent = nullptr)
QQmlComponent(QQmlEngine *engine, const QString &fileName, QQmlComponent::CompilationMode mode, QObject *parent = nullptr)
QQmlComponent(QQmlEngine *engine, const QUrl &url, QQmlComponent::CompilationMode mode, QObject *parent = nullptr)
(since 6.5) QQmlComponent(QQmlEngine *engine, QAnyStringView uri, QAnyStringView typeName, QObject *parent = nullptr)
(since 6.5) QQmlComponent(QQmlEngine *engine, QAnyStringView uri, QAnyStringView typeName, QQmlComponent::CompilationMode mode, QObject *parent = nullptr)
virtual ~QQmlComponent() override
virtual QObject *beginCreate(QQmlContext *context)
virtual void completeCreate()
virtual QObject *create(QQmlContext *context = nullptr)
void create(QQmlIncubator &incubator, QQmlContext *context = nullptr, QQmlContext *forContext = nullptr)
QObject *createWithInitialProperties(const QVariantMap &initialProperties, QQmlContext *context = nullptr)
QQmlContext *creationContext() const
QQmlEngine *engine() const
QList<QQmlError> errors() const
(since 6.5) bool isBound() const
bool isError() const
bool isLoading() const
bool isNull() const
bool isReady() const
qreal progress() const
void setInitialProperties(QObject *object, const QVariantMap &properties)
QQmlComponent::Status status() const
QUrl url() const

パブリックスロット

(since 6.5) void loadFromModule(QAnyStringView uri, QAnyStringView typeName, QQmlComponent::CompilationMode mode = PreferSynchronous)
void loadUrl(const QUrl &url)
void loadUrl(const QUrl &url, QQmlComponent::CompilationMode mode)
void setData(const QByteArray &data, const QUrl &url)

シグナル

void progressChanged(qreal progress)
void statusChanged(QQmlComponent::Status status)

詳細説明

コンポーネントは再利用可能なカプセル化されたQML型であり、明確に定義されたインターフェースを持ちます。

QQmlComponentのインスタンスはQMLファイルから生成することができます。例えば、次のようなmain.qml

import QtQuick 2.0

Item {
    width: 200
    height: 200
}

次のコードは、このQMLファイルをコンポーネントとしてロードし、create() を使ってこのコンポーネントのインスタンスを作成し、Itemwidth の値を問い合わせます:

QQmlEngine *engine = new QQmlEngine;
QQmlComponent component(engine, QUrl::fromLocalFile("main.qml"));

QObject *myObject = component.create();
QQuickItem *item = qobject_cast<QQuickItem*>(myObject);
int width = item->width();  // width = 200

QQmlEngine のインスタンスがないコードでコンポーネントのインスタンスを作成するには、qmlContext() やqmlEngine() を使用します。たとえば、以下のシナリオでは、QQuickItem サブクラス内に子アイテムを作成しています:

void MyCppItem::init()
{
    QQmlEngine *engine = qmlEngine(this);
    // Or:
    // QQmlEngine *engine = qmlContext(this)->engine();
    QQmlComponent component(engine, QUrl::fromLocalFile("MyItem.qml"));
    QQuickItem *childItem = qobject_cast<QQuickItem*>(component.create());
    childItem->setParentItem(this);
}

これらの関数は、QObject サブクラスのコンストラクタ内で呼び出されると、null を返すことに注意してください。

ネットワーク・コンポーネント

QQmlComponentに渡されたURLがネットワークリソースである場合、あるいはQML文書がネットワークリソースを参照している場合、QQmlComponentはオブジェクトを生成する前にネットワークデータを取得する必要があります。この場合、QQmlComponent はLoading status を持ちます。アプリケーションはQQmlComponent::create() を呼び出す前に、コンポーネントがReady になるまで待つ必要があります。

次の例では、ネットワークリソースからQMLファイルを読み込む方法を示します。QQmlComponentを作成した後、コンポーネントがロードされているかどうかをテストします。ロード中であれば、QQmlComponent::statusChanged()シグナルに接続し、そうでなければcontinueLoading() メソッドを直接呼び出します。コンポーネントがキャッシュされ、すぐに準備ができる場合、QQmlComponent::isLoading ()はネットワーク・コンポーネントに対してfalseになる可能性があることに注意してください。

MyApplication::MyApplication() {// ...コンポーネント= newQQmlComponent(engineQUrl("http://www.example.com/main.qml"));if(component->isLoading()) { ...   QObject::connect(component, &)QQmlComponent::statusChanged, this, &MyApplication::continueLoading); }else{ continueLoading(); } }voidMyApplication::continueLoading() {if(component->isError()) { ...        qWarning() << component->errors();
    }else{ QObject*myObject =  component->create(); } }

メンバー型ドキュメント

enum QQmlComponent::CompilationMode

QQmlComponent がコンポーネントを即座にロードするか、非同期にロードするかを指定します。

定数説明
QQmlComponent::PreferSynchronous0コンポーネントを即座にロード/コンパイルし、スレッドをブロックすることを優先します。例えば、リモート URL は常に非同期にロードされます。
QQmlComponent::Asynchronous1バックグラウンドスレッドでコンポーネントをロード/コンパイルします。

enum QQmlComponent::Status

QQmlComponent のロード状態を指定する。

定数説明
QQmlComponent::Null0このQQmlComponent にはデータがありません。QML コンテンツを追加するには、loadUrl() またはsetData() を呼び出します。
QQmlComponent::Ready1このQQmlComponent は準備ができたので、create() を呼び出すことができます。
QQmlComponent::Loading2このQQmlComponent はネットワーク・データをロードしています。
QQmlComponent::Error3エラーが発生しました。errors のリストを取得するには、errors() を呼び出します。

プロパティ・ドキュメンテーション

[read-only] progress : const qreal

0.0(何もロードされていない)から1.0(完了)までのコンポーネントのロードの進捗状況。

アクセス関数:

qreal progress() const

通知シグナル

void progressChanged(qreal progress)

[read-only] status : const Status

コンポーネントの現在のstatus

アクセス関数:

QQmlComponent::Status status() const

通知シグナル:

void statusChanged(QQmlComponent::Status status)

[read-only] url : const QUrl

コンポーネントの URL。これは、コンストラクタ、loadUrl() メソッド、またはsetData() メソッドに渡される URL です。

アクセス関数:

QUrl url() const

メンバ関数のドキュメント

QQmlComponent::QQmlComponent(QQmlEngine *engine, QObject *parent = nullptr)

データのない QQmlComponent を作成し、指定されたengineparent を与えます。setData() でデータを設定します。

QQmlComponent::QQmlComponent(QQmlEngine *engine, const QString &fileName, QObject *parent = nullptr)

与えられたfileName から QQmlComponent を作成し、指定されたparentengine を与えます。

loadUrl()も参照してください

QQmlComponent::QQmlComponent(QQmlEngine *engine, const QUrl &url, QObject *parent = nullptr)

与えられたurl から QQmlComponent を作成し、指定されたparentengine を与えます。

特に、ローカルファイルシステムからファイルを読み込む場合はQUrl::fromLocalFile() を使用してください。

相対パスは、QQmlEngine::baseUrl() に対して解決される。 () は、指定がない限り、現在の作業ディレクトリである。

loadUrl()も参照

QQmlComponent::QQmlComponent(QQmlEngine *engine, const QString &fileName, QQmlComponent::CompilationMode mode, QObject *parent = nullptr)

与えられたfileName から QQmlComponent を作成し、指定されたparentengine を与えます。modeAsynchronous の場合、コンポーネントは非同期にロードされ、コンパイルされます。

loadUrl()も参照してください

QQmlComponent::QQmlComponent(QQmlEngine *engine, const QUrl &url, QQmlComponent::CompilationMode mode, QObject *parent = nullptr)

与えられたurl から QQmlComponent を作成し、指定されたparentengine を与えます。modeAsynchronous の場合、コンポーネントは非同期にロードされ、コンパイルされます。

特に、ローカルファイルシステムからファイルを読み込む場合はQUrl::fromLocalFile() を使用してください。

相対パスは、QQmlEngine::baseUrl() に対して解決されます。 () は、指定がない限り、現在の作業ディレクトリです。

loadUrl()も参照のこと

[explicit, since 6.5] QQmlComponent::QQmlComponent(QQmlEngine *engine, QAnyStringView uri, QAnyStringView typeName, QObject *parent = nullptr)

与えられたuritypeName から QQmlComponent を作成し、指定されたparentengine を与えます。 可能であれば、コンポーネントは同期的にロードされます。

これはオーバーロードされた関数です。

この関数はQt 6.5で導入されました。

loadFromModule()も参照してください

[explicit, since 6.5] QQmlComponent::QQmlComponent(QQmlEngine *engine, QAnyStringView uri, QAnyStringView typeName, QQmlComponent::CompilationMode mode, QObject *parent = nullptr)

与えられたuritypeName から QQmlComponent を作成し、指定されたparentengine を与えます。modeAsynchronous の場合、コンポーネントは非同期にロードされ、コンパイルされます。

これはオーバーロードされた関数です。

この関数はQt 6.5で導入されました。

loadFromModule()も参照してください

[override virtual noexcept] QQmlComponent::~QQmlComponent()

QQmlComponent を破壊する。

[virtual] QObject *QQmlComponent::beginCreate(QQmlContext *context)

このコンポーネントから、指定されたcontext 内にオブジェクトのインスタンスを作成する。作成に失敗した場合はnullptr を返す。

注意: このメソッドは、コンポーネント・インスタンス生成の高度な制御を提供します。一般的に、プログラマーはQQmlComponent::create() を使用してオブジェクト・インスタンスを作成する必要があります。

QQmlComponent がインスタンスを作成するときは、3つのステップで行われます:

  1. オブジェクト階層が作成され、定数値が割り当てられます。
  2. プロパティ・バインディングが初めて評価されます。
  3. 該当する場合は、QQmlParserStatus::componentComplete() がオブジェクトに対して呼び出されます。

QQmlComponent::beginCreate()は、QQmlComponent::create()と異なり、ステップ1のみを実行します。ステップ2と3を完了するには、QQmlComponent::completeCreate()を呼び出す必要があります。

このブレークポイントは、インスタンス化されたコンポーネントに情報を伝達するためにアタッチされたプロパティを使用する場合に便利な場合があります。

返されたオブジェクトインスタンスの所有権は、呼び出し元に移ります。

注意: 定数値と実際のバインディングへのバインディングの分類は意図的に指定されておらず、Qt のバージョン間や、qmlcachegen の使用有無や使用方法によって変更される可能性があります。beginCreate()が戻る前でも後でも、特定のバインディングが評価されることに依存してはいけません。例えば、MyType.EnumValue のような定数式は、コンパイル時にそのように認識されるかもしれませんし、バインディングとして実行されるのを延期されるかもしれません。(5)"a" + " 定数文字列 "のような定数式も同様です。

completeCreate() およびQQmlEngine::ObjectOwnershipも参照してください

[virtual] void QQmlComponent::completeCreate()

このメソッドは、コンポーネントのインスタンス生成に関する高度な制御を提供する。一般的に、プログラマーはQQmlComponent::create() を使用してコンポーネントを作成する。

この関数は、QQmlComponent::beginCreate() で開始されたコンポーネント作成を完了させるもので、その後に呼び出す必要があります。

beginCreate()も参照

[virtual] QObject *QQmlComponent::create(QQmlContext *context = nullptr)

このコンポーネントから、指定されたcontext 内にオブジェクトのインスタンスを作成する。作成に失敗した場合はnullptr を返します。

contextnullptr の場合(デフォルト)、エンジンのroot context にインスタンスを作成します。

返されたオブジェクト・インスタンスの所有権は呼び出し元に移ります。

このコンポーネントから生成されるオブジェクトがビジュアルアイテムの場合、ビジュアルペアレントが必要です。ビジュアルペアレントはQQuickItem::setParentItem() を呼び出すことで設定できます。詳細は Qt Quick の Concepts - Visual Parentを参照してください。

QQmlEngine::ObjectOwnershipも参照してください

void QQmlComponent::create(QQmlIncubator &incubator, QQmlContext *context = nullptr, QQmlContext *forContext = nullptr)

提供されたincubator を使用して、このコンポーネントからオブジェクト インスタンスを作成します。context は、オブジェクト インスタンスを作成するコンテキストを指定します。

contextnullptr の場合(デフォルト)、エンジンのroot context にインスタンスが作成されます。

forContext は、このオブジェクト作成が依存するコンテキストを指定します。 が非同期で作成され、 が の場合、このオブジェクトも非同期で作成されます。 が の場合(デフォルト)、この決定には が使用される。forContext QQmlIncubator::IncubationMode QQmlIncubator::AsynchronousIfNested forContext nullptr context

作成されたオブジェクトとその作成ステータスは、incubator

QQmlIncubatorも参照のこと

QObject *QQmlComponent::createWithInitialProperties(const QVariantMap &initialProperties, QQmlContext *context = nullptr)

指定されたcontext 内に、このコンポーネントのオブジェクト・インスタンスを作成し、その最上位プロパティをinitialProperties で初期化する。

initialProperties のいずれかが設定できない場合、警告が発せられる。未設定の必須プロパティがある場合、オブジェクトの作成は失敗し、nullptr を返します。この場合、isError() はtrue を返します。

QQmlComponent::createも参照

QQmlContext *QQmlComponent::creationContext() const

コンポーネントが作成されたQQmlContext を返します。これはQMLから直接作成されたコンポーネントにのみ有効です。

QQmlEngine *QQmlComponent::engine() const

このコンポーネントのQQmlEngine を返します。

QList<QQmlError> QQmlComponent::errors() const

最後のコンパイルまたは作成操作で発生したエラーのリストを返します。isError() が設定されていない場合は、空のリストが返されます。

[since 6.5] bool QQmlComponent::isBound() const

コンポーネントがpragma ComponentBehavior: Bound を指定した QML ファイルで作成された場合は true を返し、そうでない場合は false を返します。

この関数は Qt 6.5 で導入されました。

bool QQmlComponent::isError() const

status() ==QQmlComponent::Error なら真を返す。

bool QQmlComponent::isLoading() const

status() ==QQmlComponent::Loading なら真を返す。

bool QQmlComponent::isNull() const

status() ==QQmlComponent::Null なら真を返す。

bool QQmlComponent::isReady() const

status() ==QQmlComponent::Ready なら真を返す。

[slot, since 6.5] void QQmlComponent::loadFromModule(QAnyStringView uri, QAnyStringView typeName, QQmlComponent::CompilationMode mode = PreferSynchronous)

typeNameQQmlComponent をモジュールuri にロードする。型がQMLファイルによって実装されている場合、mode 。C++ で実装された型は常に同期的にロードされます。

QQmlEngine engine;
QQmlComponent component(&engine);
component.loadFromModule("QtQuick", "Item");
// once the component is ready
std::unique_ptr<QObject> item(component.create());
Q_ASSERT(item->metaObject() == &QQuickItem::staticMetaObject);

この関数は Qt 6.5 で導入されました。

loadUrl()も参照してください

[slot] void QQmlComponent::loadUrl(const QUrl &url)

提供されたurl からQQmlComponent をロードする。

特に、ローカル・ファイルシステムからファイルをロードする場合は、QUrl::fromLocalFile() を使用すること。

相対パスは、QQmlEngine::baseUrl() に対して解決される。 () は、指定しない限り現在の作業ディレクトリである。

[slot] void QQmlComponent::loadUrl(const QUrl &url, QQmlComponent::CompilationMode mode)

提供されたurl からQQmlComponent をロードする。modeAsynchronous の場合、コンポーネントは非同期にロードされ、コンパイルされる。

特に、ローカル・ファイルシステムからファイルをロードする場合は、QUrl::fromLocalFile() を使用してください。

相対パスはQQmlEngine::baseUrl() に対して解決される。 () は、指定されない限り、現在の作業ディレクトリである。

[signal] void QQmlComponent::progressChanged(qreal progress)

progress 。0.0(何もロードされていない)から1.0(完了)の間の現在の進捗になります。

注: プロパティprogress のノーティファイアシグナル。

[slot] void QQmlComponent::setData(const QByteArray &data, const QUrl &url)

与えられた QMLdata を使うようにQQmlComponent を設定します。url が指定された場合、コンポーネント名を設定し、このコンポーネントによって解決されるアイテムのベースパスを提供するために使用されます。

void QQmlComponent::setInitialProperties(QObject *object, const QVariantMap &properties)

QQmlComponent から作成されたobject のトップレベルproperties を設定する。

このメソッドは、コンポーネント・インスタンス生成の高度な制御を提供する。一般的に、プログラマはQQmlComponent::createWithInitialProperties を使用してコンポーネントからオブジェクト・インスタンスを作成する必要があります。

このメソッドは、beginCreate の後で、completeCreate が呼び出される前に使用します。提供されたプロパティが存在しない場合は、警告が発行されます。

このメソッドでは、ネストされたプロパティの初期値を直接設定することはできません。代わりに、ネストされたプロパティを持つ値型プロパティに初期値を設定するには、その値型を作成し、そのネストされたプロパティを代入してから、構築するオブジェクトの初期プロパティとして値型を渡します。

例えば、fond.boldを設定するには、QFont を作成し、そのウェイトをboldに設定し、フォントを初期プロパティとして渡します。

[signal] void QQmlComponent::statusChanged(QQmlComponent::Status status)

status が新しいステータスとなる。

注: プロパティstatus に対するノーティファイアシグナル。

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