📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 25行目: | 25行目: | ||
<br><br> | <br><br> | ||
== | == ListViewの基本 == | ||
* ListViewの宣言 | * ListViewの宣言 | ||
*: QMLファイル内でListViewコンポーネントを宣言する。 | *: QMLファイル内でListViewコンポーネントを宣言する。 | ||
| 49行目: | 49行目: | ||
* ヘッダ / フッタの追加 | * ヘッダ / フッタの追加 | ||
*: <code>header</code>プロパティと<code>footer</code>プロパティを使用して、リストの先頭と末尾に追加のコンテンツを表示する。 | *: <code>header</code>プロパティと<code>footer</code>プロパティを使用して、リストの先頭と末尾に追加のコンテンツを表示する。 | ||
<br><br> | |||
== モデル == | |||
==== JavaScriptの配列の使用 ==== | |||
以下の例では、ListViewのmodelプロパティにJavaScriptの配列 (データモデル) を指定している。<br> | |||
実務では、ListModelコンポーネントを使用して、より複雑なモデルを使用する。<br> | |||
<br> | |||
delegateプロパティで各アイテムの表示方法を定義している。<br> | |||
デリゲートにイベントハンドラを追加することにより、アイテムが選択された場合の動作を定義している。<br> | |||
<br> | |||
modelDataは、現在のアイテムのデータを参照するための特別な変数である。<br> | |||
JavaScriptの配列をモデルとして使用する場合に使用することができる。<br> | |||
<br> | |||
<syntaxhighlight lang="qml"> | |||
import QtQuick | |||
import QtQuick.Controls | |||
Window { | |||
width: 300 | |||
height: 400 | |||
title: "サンプルリスト" | |||
visible: true | |||
ListView { | |||
anchors.fill: parent | |||
// モデルプロパティにJavaScript配列を直接指定 | |||
// これにより、ListViewは配列内の各要素をリストアイテムとして表示 | |||
model: ["りんご", "バナナ", "オレンジ", "ぶどう", "メロン"] | |||
// デリゲートプロパティで各アイテムの表示方法を定義 | |||
delegate: ItemDelegate { | |||
width: parent.width | |||
text: modelData // modelDataは現在のアイテムのデータを参照します | |||
// クリックイベントの処理 | |||
onClicked: { | |||
console.log("選択された果物: " + modelData) | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== ListModelコンポーネントの使用 ==== | |||
以下の例では、ListViewのmodelプロパティにListModelコンポーネント (データモデル) を指定している。<br> | |||
<br> | |||
* ListModelコンポーネント | |||
*: 複数の属性 (例: name, color, stock) を持つアイテムのリストを生成する。 | |||
* ListViewコンポーネント | |||
*: modelプロパティにListModelコンポーネントを指定する。 | |||
* ListViewコンポーネントのdelegateプロパティ | |||
*: 各アイテムの表示方法をより詳細に定義する。 | |||
*: <br> | |||
*: デリゲートに複雑なコンポーネントを定義して表示する。 | |||
*: デリゲート内の各コンポーネントにおいて、ListElementで定義した各プロパティ (例: name, color, stock) にアクセスする。 | |||
<br> | |||
<u>※注意</u><br> | |||
<u>ListModelコンポーネントを使用することにより、複数の属性を持つ構造化されたデータを扱うことができる。</u><br> | |||
<u>また、モデルを動的に更新する、あるいは、C++側から操作することも可能である。</u><br> | |||
<br> | |||
<u>ListModelコンポーネントは小規模なデータセットには適しているが、大規模なデータを扱う場合はC++で定義したカスタムモデルを使用することが推奨される。</u><br> | |||
<br> | |||
<syntaxhighlight lang="qml"> | |||
import QtQuick | |||
import QtQuick.Controls | |||
import QtQuick.Layouts | |||
Window { | |||
width: 300 | |||
height: 400 | |||
title: "サンプルリスト" | |||
visible: true | |||
// ListModelを定義して、複数の属性を持つアイテムのリストを定義 | |||
ListModel { | |||
id: fruitModel | |||
ListElement { name: "りんご"; color: "赤"; stock: 50 } | |||
ListElement { name: "バナナ"; color: "黄"; stock: 30 } | |||
ListElement { name: "オレンジ"; color: "橙"; stock: 40 } | |||
ListElement { name: "ぶどう"; color: "紫"; stock: 25 } | |||
ListElement { name: "メロン"; color: "緑"; stock: 15 } | |||
} | |||
ListView { | |||
anchors.fill: parent | |||
// 上記で定義したListModelをモデルとして使用 | |||
model: fruitModel | |||
// 各アイテムの表示方法を定義 | |||
delegate: ItemDelegate { | |||
width: parent.width | |||
height: 60 | |||
RowLayout { | |||
anchors.fill: parent | |||
anchors.margins: 10 | |||
// 果物の名前を表示 | |||
Text { | |||
text: name // ListElementで定義した'name'プロパティにアクセス | |||
font.bold: true | |||
} | |||
// 果物の色を表示 | |||
Text { | |||
text: "色: " + color // 'color'プロパティにアクセス | |||
} | |||
// 在庫数を表示 | |||
Text { | |||
text: "在庫: " + stock // 'stock'プロパティにアクセス | |||
Layout.alignment: Qt.AlignRight // 右寄せに配置 | |||
} | |||
} | |||
// クリックイベントの処理 | |||
onClicked: { | |||
console.log("選択された果物: " + name + ", 在庫: " + stock) | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||