このページでは

C

Loader QML Type

URLまたはコンポーネントからのサブツリーの動的ロードを許可します。詳細...

Import Statement: import QtQuick
Since: Qt Quick Ultralite 2.3

列挙

プロパティ

信号

方法

詳細説明

ローダは、コンパイル済みの 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 のサイズが、width、height の設定またはアンカーリングによって明示的に指定されている場合、ロードされたアイテムは Loader のサイズにリサイズされます。

どちらのシナリオでも、アイテムとローダーのサイズは同じです。これにより、ローダーへのアンカーは、ロードされたアイテムへのアンカーと同等であることが保証されます。

サイズローダー.qmlサイズアイテム.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 を使用したプロパティの読み書きや関数の呼び出しなどのインタラクションは事実上使用できません。

この制限を回避するには、Mediatorのシングルトンを作成します。例えば

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
}

Mediator シングルトンは、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

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

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

値を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 に設定します。

ローダはビジュアル・アイテム(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 がローカルファイルの場合、最初のstatusReadyError のどちらかになります。 このような場合、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 ライセンスの下で利用可能です。
詳細を確認してください。