C
Loader QML Type
URLまたはコンポーネントからのサブツリーの動的ロードを許可します。詳細...
| Import Statement: | import QtQuick |
| Since: | Qt Quick Ultralite 2.3 |
列挙
プロパティ
- active : bool
- item : ItemBase*
- source : string
- sourceComponent : Component
(since Qt Quick Ultralite 2.4) - status : Status
(since Qt Quick Ultralite 2.6)
信号
- loaded()
方法
- void setSource(string source)
詳細説明
ローダは、コンパイル済みの 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 を空文字列に設定するか、sourceComponent をundefined に設定すると、現在ロードされているオブジェクトが破棄され、リソースが解放され、Loader は空になります。
割り当て
Qt Quick Ultralite Loader は、QmlDynamicObjectsメモリアロケータを使用してアイテムを割り当てます。
割り当ては、ソースまたはsourceComponent が変更されるたびに行われます。割り当て解除は、各割り当ての前と、active プロパティがfalse に変更されたときに行われます。
Qt Quick Ultraliteのすべての割り当てが単一スレッドで実行されることに注意してください。ユーザー定義の初期化ルーチン(クラス・コンストラクタ)の時間によっては、短い UI フリーズが発生することがあります。
ローダーのサイジング動作
ローダーは、以下のサイジング規則を適用します:
- ローダーに明示的なサイズが指定されていない場合、コンポーネントがロードされると、ローダーは自動的にロードされたアイテムのサイズにリサイズされます。
- Loader のサイズが、width、height の設定またはアンカーリングによって明示的に指定されている場合、ロードされたアイテムは Loader のサイズにリサイズされます。
どちらのシナリオでも、アイテムとローダーのサイズは同じです。これにより、ローダーへのアンカーは、ロードされたアイテムへのアンカーと同等であることが保証されます。
| サイズローダー.qml | サイズアイテム.qml | 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のシングルトンを作成します。例えば
このシングルトンは、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.Ready | QML ソースがロードされました。 |
Loader.Error | QML ソースのロード中にエラーが発生しました。 |
プロパティの説明
active : bool |
item : ItemBase* |
このプロパティは、現在ロードされているトップレベル・オブジェクトを保持します。
Communication with the loaded itemsも参照してください 。
source : string |
このプロパティは、インスタンス化する QML アイテムの URL を保持します。
Loaderはビジュアルアイテム(Itemを継承したもの)のみをロードすることができます。
このプロパティに空文字列または新しい URL を設定すると、前の URL からロードされたアイテムはアンロードされます。
source プロパティの値は、現在のモジュール内の QML アイテムのソースファイルでなければなりません。他のモジュールのアイテムを使いたい場合は、代わりにsourceComponent を使ってください。次の例では、"MyModuleItem.qml "がMyModule というモジュールの一部であるとします:
sourceComponentも参照してください 。
sourceComponent : Component |
このプロパティは、インスタンス化する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 |
このプロパティは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() |
メソッド・ドキュメント
void setSource(string source) |
指定されたソース・コンポーネントのオブジェクト・インスタンスを作成します。このインスタンスは、ロードとインスタンス化が完了すると、item プロパティを使用してアクセスできるようになります。
この関数が呼び出された時点でactive プロパティがfalse の場合、指定されたsource コンポーネントはロードされず、source がキャッシュされます。ローダーがactive になると、source コンポーネントのインスタンスが作成されます。
Communication with the loaded itemsも参照してください 。
特定の Qt ライセンスの下で利用可能です。
詳細を確認してください。