Flickableに長方形(5k〜10k要素)を配置しようとしています。データはQAbstractListModelのサブクラスであるカスタムモデルから取得されます。期待される結果は次のようになります。モデルから大きなマップを動的に設定する
私の最初のアプローチは、このような長方形を作成するために、デリゲートとリピータを使用していた:
Repeater {
id: repeater
model: particleListModel
delegate: mapDelegate
}
Component {
id: mapDelegate
Rectangle {
property bool checked: false
id: particle
color: "transparent"
width: model.boundswidth
height: model.boundsheight
x: model.boundsx
y: model.boundsy
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked: {
console.log(model.index)
particleIndex = model.index
}
}
border.color: mouseArea.containsMouse ? "lightgreen" : (model.index === particleIndex) ? "green" : "red"
border.width: 1.5
}
}
これは、四角形を表示するには、正常に動作します、しかし、ロード中(〜6秒)、UIがブロックされている間にブロックされます。 は、したがって、私の秒アプローチはそうのような非同期マップを移入するために、Loaderを使用していた:
Component {
id: mapDelegate
Loader {
id: particle
asynchronous: true
onLoaded: {
console.log("loaded " + model.index)
}
sourceComponent:
Rectangle {
property bool checked: false
color: "red"
width: model.boundswidth
height: model.boundsheight
x: model.boundsx
y: model.boundsy
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked: {
console.log(model.index)
particleIndex = model.index
}
}
border.color: mouseArea.containsMouse ? "lightgreen" : (model.index === particleIndex) ? "green" : "red"
border.width: 1.5
}
}
}
を、これは動作しますが、それはすべての要素をロードし終えるまでに長い時間がかかるUIをブロックしません(〜25秒) 。最初のいくつかの要素は非常に迅速に読み込まれますが、読み込みは最終的にはますます遅くなり、単一の要素が追加されているのを見ることができるようになります。
UIをブロックしないで、妥当な時間内にすべての要素を読み込むようにパフォーマンスを向上させたいと考えています。私が行方不明の別の方法がありますか?または、現在のビューに必要な要素だけをロードするエレガントな方法がありますか?ここには正しいアプローチがありますか?