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)
詳細な説明
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 を空の文字列に設定するか、sourceComponent をundefined に設定すると、現在読み込まれているオブジェクトが破棄され、リソースが解放され、Loaderは空の状態になります。
割り当て
Qt Quick のUltralite Loaderは、QmlDynamicObjectsメモリアロケータを使用してアイテムを割り当てます。
割り当ては、ソースまたはsourceComponent が変更されるたびに実行されます。解放は、各割り当ての前に、およびactive プロパティがfalse に変更されたときに実行されます。
Qt Quick のUltraliteにおけるすべての割り当ては、単一のスレッド上で実行されることに注意してください。ユーザー定義の初期化ルーチン(クラスのコンストラクタ)の実行時間によっては、UIが一時的にフリーズすることがあります。
ローダーのサイズ決定動作
Loader は、以下のサイズ設定ルールを適用します。
- Loader に明示的なサイズが指定されていない場合、コンポーネントの読み込みが完了すると、Loader は読み込まれたアイテムのサイズに合わせて自動的にリサイズされます。
- 幅や高さを設定するか、アンカー指定によってローダーのサイズが明示的に指定されている場合、読み込まれたアイテムはローダーのサイズに合わせてリサイズされます。
どちらの場合も、アイテムとローダーのサイズは同一になります。これにより、ローダーへのアンカー設定は、読み込まれたアイテムへのアンカー設定と同等になります。
| SizeLoader.qml | SizeItem.qml | MyRect.qml |
|---|---|---|
| ||
| 赤い長方形は、ルート項目のサイズに合わせてサイズ変更されます。 | 赤い長方形は 50x50 になり、ルートアイテムの中央に配置されます。 |
制限事項
読み込まれたアイテムとの通信
Qt Quick Loader とは異なり、Qt Quick Ultralite Loader にはオブジェクトイントロスペクションシステムがないため、item プロパティを使用したロード済みアイテムへのアクセスはサポートされていません。
この制限により、Loader.item を使用したプロパティの読み書きや関数の呼び出しといった操作は事実上不可能になります。
この制限を回避するには、メディエーターのシングルトンを作成します。例:
このシングルトンは、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.Ready | QML ソースが読み込まれました。 |
Loader.Error | QML ソースの読み込み中にエラーが発生しました。 |
プロパティのドキュメント
active : bool
このプロパティは、Loaderが現在アクティブな場合、true となります。デフォルトではtrue です。
Loaderが非アクティブな場合、source を変更しても、Loaderがアクティブになるまではアイテムはインスタンス化されません。
値を `false` に設定すると、ローダーによって読み込まれたすべてのアイテムが解放されますが、`source` には影響しません。
item : ItemBase*
このプロパティには、現在読み込まれている最上位のオブジェクトが格納されます。
「Communication with the loaded items」も参照してください 。
source : string
このプロパティには、インスタンス化されるQMLアイテムのURLが格納されます。
Loader は、ビジュアルアイテム(Item を継承するアイテム)のみを読み込むことができます。
このプロパティを空の文字列または新しい URL に設定すると、以前の URL から読み込まれたアイテムがアンロードされます。
source プロパティの値は、現在のモジュール内のQMLアイテムのソースファイルでなければなりません。別のモジュールのアイテムを使用したい場合は、代わりにsourceComponent を使用してください。以下のスニペットを参照してください。ここで、「MyModuleItem.qml」はモジュールMyModule の一部です:
「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()
このシグナルは、アイテムの読み込みが正常に完了したときに発火します。
読み込みに失敗すると、item がnull に設定されます。これは、onItemChanged ハンドラによって検出できます。
注: 対応するハンドラは onLoaded です。
「 source 」および「setSource 」も参照してください 。
メソッドのドキュメント
void setSource(string source)
指定されたソースコンポーネントのオブジェクトインスタンスを作成します。読み込みとインスタンス化が完了すると、item プロパティを使用してこのインスタンスにアクセスできるようになります。
この関数が呼び出された時点で、active プロパティがfalse に設定されている場合、指定されたsource コンポーネントは読み込まれませんが、source はキャッシュされます。ローダーがactive に設定されると、source コンポーネントのインスタンスが作成されます。
Communication with the loaded itemsも参照してください 。
特定の Qt ライセンスの下で利用可能です。
詳細はこちらをご覧ください。