このページでは

C

Loader QML Type

URLまたはコンポーネントからサブツリーを動的に読み込むことができます。詳細...

Import Statement: import QtQuick
Since: Qt Quick Ultralite 2.3

列挙型

プロパティ

シグナル

方法

詳細な説明

Loaderは、事前コンパイル済みのQMLコンポーネント(source プロパティを使用)またはComponent オブジェクト(sourceComponent プロパティを使用)を読み込むことができます。これは、コンポーネントが必要になるまでその生成を遅らせる場合に役立ちます。例えば、コンポーネントをオンデマンドで生成する必要がある場合や、パフォーマンス上の理由から不必要に生成すべきでない場合などが挙げられます。

以下は、MouseArea がクリックされた際に「Page1.qml」をコンポーネントとして読み込むLoaderの例です:

import QtQuick 2.15

Item {
    width: 200; height: 200
    Loader { id: pageLoader }

    MouseArea {
        anchors.fill: parent
        onClicked: pageLoader.source = "Page1.qml"
    }
}

source またはsourceComponent が変更されると、以前にインスタンス化されていた項目はすべて破棄されます。source を空の文字列に設定するか、sourceComponentundefined に設定すると、現在読み込まれているオブジェクトが破棄され、リソースが解放され、Loaderは空の状態になります。

割り当て

Qt Quick のUltralite Loaderは、QmlDynamicObjectsメモリアロケータを使用してアイテムを割り当てます。

割り当ては、ソースまたはsourceComponent が変更されるたびに実行されます。解放は、各割り当ての前に、およびactive プロパティがfalse に変更されたときに実行されます。

Qt Quick のUltraliteにおけるすべての割り当ては、単一のスレッド上で実行されることに注意してください。ユーザー定義の初期化ルーチン(クラスのコンストラクタ)の実行時間によっては、UIが一時的にフリーズすることがあります。

ローダーのサイズ決定動作

Loader は、以下のサイズ設定ルールを適用します。

  • Loader に明示的なサイズが指定されていない場合、コンポーネントの読み込みが完了すると、Loader は読み込まれたアイテムのサイズに合わせて自動的にリサイズされます。
  • 幅や高さを設定するか、アンカー指定によってローダーのサイズが明示的に指定されている場合、読み込まれたアイテムはローダーのサイズに合わせてリサイズされます。

どちらの場合も、アイテムとローダーのサイズは同一になります。これにより、ローダーへのアンカー設定は、読み込まれたアイテムへのアンカー設定と同等になります。

SizeLoader.qmlSizeItem.qmlMyRect.qml
import QtQuick 2.15

Item {
    width: 200; height: 200

    Loader {
        // Explicitly set the size of the
        // Loader to the parent item's size
        anchors.fill: parent
        source: "MyRect.qml"
    }
}
import QtQuick 2.15

Item {
    width: 200; height: 200

    Loader {
        // position the Loader in the center
        // of the parent
        anchors.centerIn: parent
        source: "MyRect.qml"
    }
}
import QtQuick 2.15

Rectangle {
    width: 50
    height: 50
    color: "red"
}
赤い長方形は、ルート項目のサイズに合わせてサイズ変更されます。赤い長方形は 50x50 になり、ルートアイテムの中央に配置されます。

制限事項

読み込まれたアイテムとの通信

Qt Quick Loader とは異なり、Qt Quick Ultralite Loader にはオブジェクトイントロスペクションシステムがないため、item プロパティを使用したロード済みアイテムへのアクセスはサポートされていません。

この制限により、Loader.item を使用したプロパティの読み書きや関数の呼び出しといった操作は事実上不可能になります。

この制限を回避するには、メディエーターのシングルトンを作成します。例:

import QtQuick 2.15
pragma singleton

QtObject {
    property string text: ""
}

このシングルトンは、main.qml ファイル内で次のように使用されます:

import QtQuick 2.15
import Mediator

Column {
    Text {
        text: "Text from loaded item: " + Mediator.text
    }

    Loader {
        source: "MyText.qml"
    }
}

また、MyText.qml では次のように使用します:

import QtQuick 2.15
import Mediator

Text {
    text: "mytext"
    Component.onCompleted: Mediator.text = text
}

sourceComponent プロパティを使用する場合、Component はドキュメント内の他のアイテムにバインディングを設定できるため、メディエーターのシングルトンは必要ありません:

import QtQuick 2.15

Rectangle {
    id: root

    Item {
        id: globalSettings
        property int usersVisisted: 0
        property color page1Color: "orange"

        signal updatePageStats()
    }

    Component {
        id: page1
        Rectangle {
            color: globalSettings.page1Color
            width: 100
            height: 100

            Connections {
                target: globalSettings
                function onUpdatePageStats() {
                    globalSettings.usersVisisted = 999
                }
            }
        }
    }

    Column {
        Loader {
            id: loader1
            sourceComponent: page1
            Component.onCompleted: {
                globalSettings.page1Color = "pink"
                globalSettings.updatePageStats()
            }
        }
        Text {
            text: "users visited: " + globalSettings.usersVisisted
        }
    }
}

ビューデリゲート

Qt Quick Ultralite Loaderは、View Delegate内では使用できません。

既知の問題」または「制限事項も参照してください

列挙型のドキュメント

Status

コンポーネントの読み込みの進行状況を示すステータス値。

定数説明
Loader.Nullローダーが非アクティブであるか、QMLソースが設定されていません。
Loader.ReadyQML ソースが読み込まれました。
Loader.ErrorQML ソースの読み込み中にエラーが発生しました。

プロパティのドキュメント

active : bool

このプロパティは、Loaderが現在アクティブな場合、true となります。デフォルトではtrue です。

Loaderが非アクティブな場合、source を変更しても、Loaderがアクティブになるまではアイテムはインスタンス化されません。

値を `false` に設定すると、ローダーによって読み込まれたすべてのアイテムが解放されますが、`source` には影響しません。

item : ItemBase*

このプロパティには、現在読み込まれている最上位のオブジェクトが格納されます。

Communication with the loaded items」も参照してください

source : string

このプロパティには、インスタンス化されるQMLアイテムのURLが格納されます。

Loader は、ビジュアルアイテム(Item を継承するアイテム)のみを読み込むことができます。

Item {
    Loader {
        source: "MyItem.qml"
    }
}

このプロパティを空の文字列または新しい URL に設定すると、以前の URL から読み込まれたアイテムがアンロードされます。

source プロパティの値は、現在のモジュール内のQMLアイテムのソースファイルでなければなりません。別のモジュールのアイテムを使用したい場合は、代わりにsourceComponent を使用してください。以下のスニペットを参照してください。ここで、「MyModuleItem.qml」はモジュールMyModule の一部です:

import MyModule

Item {
    Loader {
        sourceComponent: MyModuleItem {}
    }
}

sourceComponent」も参照してください

sourceComponent : Component [since Qt Quick Ultralite 2.4]

このプロパティには、インスタンス化するComponent が格納されます。

Item {
    Component {
        id: redSquare
        Rectangle { color: "red"; width: 10; height: 10 }
    }

    Loader { sourceComponent: redSquare }
    Loader { sourceComponent: redSquare; x: 10 }
}

現在ロードされているオブジェクトをアンロードするには、このプロパティをundefined に設定します。

Loader は、ビジュアルアイテム(Item を継承するアイテム)のみを読み込むことができます。

このプロパティは、Qt Quick Ultralite 2.4 で導入されました。

source」も参照してください

status : Status [since Qt Quick Ultralite 2.6]

このプロパティは、QMLコンポーネントの読み込み状態を保持します。以下のいずれかの値をとることができます。

このステータスを利用して、更新情報を提供したり、ステータスの変化に対して何らかの対応を行ったりできます。例えば、次のような処理が可能です:

  • 状態の変更をトリガーする:
    State {
        name: 'loaded'
        when: loader.status == Loader.Ready
    }
  • onStatusChanged シグナルハンドラを実装する:
    Loader {
        id: loader
        onStatusChanged: {
            if (loader.status == Loader.Ready)
                console.log('Loaded');
        }
    }
  • ステータス値にバインドする:
    Text {
        text: loader.status == Loader.Ready ? 'Loaded' : 'Not loaded'
    }

注: ` source `ローカルファイルの場合 、初期の `status ` は `Ready ` または `Error` のいずれかになります。このような場合、`onLoaded ` シグナルについては通知を受け取りますが、`onStatusChanged ` シグナルについては通知を受け取りません。

このプロパティは、Qt Quick Ultralite 2.6 で導入されました。

シグナルのドキュメント

loaded()

このシグナルは、アイテムの読み込みが正常に完了したときに発火します。

読み込みに失敗すると、itemnull に設定されます。これは、onItemChanged ハンドラによって検出できます。

注: 対応するハンドラは onLoaded です。

source 」および「setSourceも参照してください

メソッドのドキュメント

void setSource(string source)

指定されたソースコンポーネントのオブジェクトインスタンスを作成します。読み込みとインスタンス化が完了すると、item プロパティを使用してこのインスタンスにアクセスできるようになります。

この関数が呼び出された時点で、active プロパティがfalse に設定されている場合、指定されたsource コンポーネントは読み込まれませんが、source はキャッシュされます。ローダーがactive に設定されると、source コンポーネントのインスタンスが作成されます。

Communication with the loaded itemsも参照してください

特定の Qt ライセンスの下で利用可能です。
詳細はこちらをご覧ください。