13,230
回編集
編集の要約なし |
(→メソッド) |
||
| 207行目: | 207行目: | ||
データソースとして与えられたアイテムの配列で、現在のモデルを更新する。<br> | データソースとして与えられたアイテムの配列で、現在のモデルを更新する。<br> | ||
<br> | <br> | ||
syncメソッドは、新しいデータで現在のListModelを完全に置き換える。<br> | |||
同期後は、元のデータとの動的なリンクは維持されない。(1度の同期のみ)<br> | |||
同期時に既存のデータは削除される。<br> | |||
<br> | |||
syncメソッドは、モデルの初期化や別のデータソースからの一括更新が必要な場合に使用する。<br> | |||
<syntaxhighlight lang="qml"> | |||
ListModel { | |||
id: myModel | |||
Component.onCompleted: { | |||
// 配列での同期 | |||
sync([ | |||
{ name: "Alice", age: 20 }, | |||
{ name: "Bob", age: 25 } | |||
]) | |||
// 新しいデータで上書き同期 | |||
sync([ | |||
{ name: "Charlie", age: 30 }, | |||
{ name: "David", age: 35 } | |||
]) | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== syncWithメソッド ==== | |||
別のListModelの内容と同期を取る場合に使用する。<br> | |||
<br> | |||
syncWithメソッドは、別のListModelの内容をコピーする。<br> | |||
同期後は、元のデータとの動的なリンクは維持されない。(1度の同期のみ)<br> | |||
同期時に既存のデータは削除される。<br> | |||
<br> | |||
syncWithメソッドは、モデルの初期化や別のデータソースからの一括更新が必要な場合に使用する。<br> | |||
<syntaxhighlight lang="qml"> | <syntaxhighlight lang="qml"> | ||
// 元となるモデル | |||
ListModel { | |||
id: sourceModel | |||
ListElement { name: "Alice"; age: 20 } | |||
ListElement { name: "Bob"; age: 25 } | |||
} | |||
// 同期先のモデル | |||
ListModel { | |||
id: targetModel | |||
Component.onCompleted: { | |||
// sourceModelの内容と同期 | |||
syncWith(sourceModel) | |||
} | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
==== シグナル / シグナルハンドラ ==== | ==== シグナル / シグナルハンドラ ==== | ||
モデルの変更を検知するためのシグナルがいくつか存在する。<br> | |||
<br> | |||
ただし、count、append、remove、clear、get、set、setProperty、move等のメソッドで対応できることが多い。<br> | |||
<br> | <br> | ||
==== countChangedシグナル / onCountChangedシグナルハンドラ ==== | ==== countChangedシグナル / onCountChangedシグナルハンドラ ==== | ||
| 221行目: | 271行目: | ||
<syntaxhighlight lang="qml"> | <syntaxhighlight lang="qml"> | ||
onCountChanged: console.log("アイテム数の変更 : ", count) | onCountChanged: console.log("アイテム数の変更 : ", count) | ||
</syntaxhighlight> | |||
<br> | |||
==== dataChangedシグナル / onDataChangedシグナルハンドラ ==== | |||
ListModel内の特定範囲のデータが変更された時に送信される。 | |||
<syntaxhighlight lang="qml"> | |||
onDataChanged: { | |||
console.log("データが変更されました") | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== rowsInsertedシグナル / onRowsInsertedシグナルハンドラ ==== | |||
rowsRemovedシグナルは、行が追加された時に送信する。<br> | |||
<syntaxhighlight lang="qml"> | |||
onRowsInserted: console.log("行が追加されました") | |||
</syntaxhighlight> | |||
<br> | |||
==== rowsRemovedシグナル / onRowsRemovedシグナルハンドラ ==== | |||
行が削除された時にシグナルを送信する。<br> | |||
<syntaxhighlight lang="qml"> | |||
onRowsRemoved: console.log("行が削除されました") | |||
</syntaxhighlight> | |||
<br> | |||
==== modelResetシグナル / onModelResetシグナルハンドラ ==== | |||
モデルが完全にリセットされた時に送信される。<br> | |||
<syntaxhighlight lang="qml"> | |||
onModelReset: console.log("モデルがリセットされました") | |||
</syntaxhighlight> | |||
<br> | |||
==== layoutChangedシグナル / onLayoutChangedシグナルハンドラ ==== | |||
ListModelのレイアウトが変更された時に送信される。<br> | |||
例 : moveメソッドによる要素の移動時等<br> | |||
<br> | |||
<syntaxhighlight lang="qml"> | |||
onLayoutChanged: console.log("レイアウトが変更されました") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||