「QMLのコントロール - ListModel」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
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">
  myModel.sync(["item1", "item2", "item3"])
  // 元となるモデル
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>
<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>

案内メニュー