「QMLの基礎 - モデルとビュー」の版間の差分

648行目: 648行目:
また、<code>Repeater</code>が作成するアイテムのテンプレートとして、デリゲートを使用することもできる。<br>
また、<code>Repeater</code>が作成するアイテムのテンプレートとして、デリゲートを使用することもできる。<br>
これは、<code>delegate</code>プロパティで指定する。<br>
これは、<code>delegate</code>プロパティで指定する。<br>
<br><br>
== モデルデータの変更 ==
モデルのデータを変更するには、モデルのプロパティに最新の値を割り当てる。<br>
QMLの<code>ListModel</code>はデフォルトで編集可能であるが、C++のモデルは<code>setData</code>メソッドを実装しないと編集できない。<br>
なお、整数やJavaScriptの配列モデルは、読み取り専用である。<br>
<br>
以下の例では、EditableModelは<code>QAbstractItemModel</code>を継承したC++モデルで<code>setData</code>メソッドを実装しており、かつ、QML型として登録されている場合、<br>
データは、以下のようにモデルに書き込まれまる。<br>
<syntaxhighlight lang="qml">
ListView {
    anchors.fill: parent
    model: EditableModel {}
    delegate: TextEdit {
      width: ListView.view.width
      height: 30
      text: model.edit
      Keys.onReturnPressed: {
          model.edit = text
      }
    }
}
</syntaxhighlight>
<br>
<u>※注意</u><br>
<u><code>edit</code>ロールは、<code>Qt::EditRole</code>と同じである。組み込みのロール名については、[https://doc.qt.io/qt-5/qabstractitemmodel.html#roleNames roleNames()]を参照すること。</u><br>
<u>実際のモデルでは、通常、カスタムロールを登録する。</u><br>
<br>
モデルのロールが<code>required <プロパティ名></code>にバインドされている場合、そのプロパティに割り当ててもモデルは変更されない。<br>
代わりに、モデルへのバインドが解除される。(他のプロパティへの割り当てが既存のバインドを解除するのと同様である)<br>
<br>
必須プロパティを使用してモデルデータを変更する場合、<code>model</code>も必須プロパティにして<code>model.propertyName</code>に割り当てる。<br>
<br>
詳細は、[https://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html#changing-model-data Using C++ Models with Qt Quick Views]を参照すること。<br>
<br><br>
== トランジションの使用 ==
トランジションは、ポジショナに追加、ポジショナ内での移動、ポジショナから削除されたアイテムをアニメーション化するために使用する。<br>
<br>
アイテムを追加するトランジションは、ポジショナの一部として作成されたアイテムや、ポジショナの子になるために再配置されたアイテムに適用される。<br>
アイテムを削除するためのトランジションは、ポジショナ内のアイテムが削除された場合や、ポジショナから削除されてドキュメント内に新しい親が与えられた場合に適用される。<br>
<br>
<u>※注意</u><br>
<u>アイテムの不透明度をゼロに変更しても、ポジショナからアイテムが消えることはない。</u><br>
<u>これらのアイテムは、<code>visible</code>プロパティを変更することで、削除および追加することができる。</u><br>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]