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 のサイズにリサイズされます。
どちらのシナリオでも、アイテムとローダーのサイズは同じです。これにより、ローダーへのアンカーは、ロードされたアイテムへのアンカーと同等であることが保証されます。
| SizeLoader.qml | サイズアイテム.qml | MyRect.qml |
|---|---|---|
| ||
| 赤い矩形はルートアイテムのサイズに合わせます。 | 赤い長方形はルートアイテムの中央に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
このプロパティは、ローダーが現在アクティブである場合、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 ライセンスの下で利用可能です。
詳細を確認してください。