「QMLのコントロール - ListView」の版間の差分
(ページの作成:「== 概要 == <br><br> == アイテムのインデックスの取得 == 画面に表示されている現在のアイテムのインデックスを取得する方法は…」) |
編集の要約なし |
||
6行目: | 6行目: | ||
画面に表示されている現在のアイテムのインデックスを取得する方法は、いくつか存在する。<br> | 画面に表示されている現在のアイテムのインデックスを取得する方法は、いくつか存在する。<br> | ||
<br> | <br> | ||
==== | ==== indexAtメソッド ==== | ||
現在の画面のxy座標を利用する場合、<code>ListView</code>の<code>indexAt</code>メソッドを使用することができる。<br> | |||
<br> | <br> | ||
==== | ==== インデックスロール ==== | ||
各デリゲートでは、デリゲートのスコープ内でインデックスロールを使用してインデックスを見つけることもできる。<br> | |||
インデックスロールは、<code>model</code>で宣言したロールのようなものであり、<code>ListView</code>により自動的に割り当てられる。<br> | |||
インデックスロールの詳細は、以下のWebサイトを参照すること。<br> | |||
http://qt-project.org/doc/qt-5/qtquick-modelviewsdata-modelview.html#qml-data-models<br> | http://qt-project.org/doc/qt-5/qtquick-modelviewsdata-modelview.html#qml-data-models<br> | ||
<syntaxhighlight lang="qml"> | <syntaxhighlight lang="qml"> | ||
27行目: | 27行目: | ||
<br> | <br> | ||
モデル内のアイテムのインデックスを含む特別なインデックスロールも、デリゲートが利用できる。<br> | モデル内のアイテムのインデックスを含む特別なインデックスロールも、デリゲートが利用できる。<br> | ||
モデルからアイテムを削除した場合、このインデックスは- | モデルからアイテムを削除した場合、このインデックスは<code>-1</code>に設定されることに注意する。<br> | ||
<br> | <br> | ||
==== | ==== currentItemプロパティ ==== | ||
<code>ListView</code>の<code>currentItem</code>プロパティに明示的に値を割り当てて、<code>ListView</code>自身でスクロールできるようにする。<br> | |||
<br> | <br> | ||
<code>ListView</code>の<code>currentItem</code>プロパティの詳細は、以下のWebサイトを参照すること。<br> | |||
http://qt-project.org/doc/qt-5/qtquick-views-objectmodel-objectmodel-qml.html<br> | http://qt-project.org/doc/qt-5/qtquick-views-objectmodel-objectmodel-qml.html<br> | ||
<br><br> | |||
== 右クリックの有効化 == | |||
<code>ListView</code>のアイテムを右クリックを有効にするには、<code>delegate</code>のアイテムに<code>MouseArea</code>コントロールを追加して、<br> | |||
<code>MouseArea</code>コントロールの<code>acceptedButtons</code>プロパティに<code>Qt.RightButton</code>を追加する。<br> | |||
<br> | |||
以下の例では、ListViewのアイテムを右クリックした時、コンテキストメニューを表示している。<br> | |||
<syntaxhighlight lang="qml"> | |||
ListView { | |||
id: listView | |||
width: 300 | |||
height: 200 | |||
model: ListModel { | |||
ListElement { | |||
a: 1 | |||
b: 2 | |||
} | |||
ListElement { | |||
a: 3 | |||
b: 4 | |||
} | |||
} | |||
delegate: Rectangle { | |||
id: rect | |||
height: parent.height | |||
left: parent.left | |||
right: parent.right | |||
verticalCenter: parent.verticalCenter | |||
MouseArea { | |||
anchors.fill: parent | |||
acceptedButtons: Qt.LeftButton | Qt.RightButton | |||
onClicked: { | |||
if (mouse.button == Qt.LeftButton) | |||
{ // 左クリック | |||
} | |||
else if (mouse.button == Qt.RightButton) | |||
{ // 右クリック | |||
contextMenu.popup() | |||
} | |||
} | |||
} | |||
} | |||
Menu { | |||
id: contextMenu | |||
MenuItem { | |||
text: qsTr('Context Menu 1') | |||
} | |||
MenuItem { | |||
text: qsTr('Context Menu 2') | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] |
2021年10月12日 (火) 11:08時点における版
概要
アイテムのインデックスの取得
画面に表示されている現在のアイテムのインデックスを取得する方法は、いくつか存在する。
indexAtメソッド
現在の画面のxy座標を利用する場合、ListView
のindexAt
メソッドを使用することができる。
インデックスロール
各デリゲートでは、デリゲートのスコープ内でインデックスロールを使用してインデックスを見つけることもできる。
インデックスロールは、model
で宣言したロールのようなものであり、ListView
により自動的に割り当てられる。
インデックスロールの詳細は、以下のWebサイトを参照すること。
http://qt-project.org/doc/qt-5/qtquick-modelviewsdata-modelview.html#qml-data-models
ListView
{
delegate: ColumnLayout
{
property int indexOfThisDelegate: index
// ...略
}
}
モデル内のアイテムのインデックスを含む特別なインデックスロールも、デリゲートが利用できる。
モデルからアイテムを削除した場合、このインデックスは-1
に設定されることに注意する。
currentItemプロパティ
ListView
のcurrentItem
プロパティに明示的に値を割り当てて、ListView
自身でスクロールできるようにする。
ListView
のcurrentItem
プロパティの詳細は、以下のWebサイトを参照すること。
http://qt-project.org/doc/qt-5/qtquick-views-objectmodel-objectmodel-qml.html
右クリックの有効化
ListView
のアイテムを右クリックを有効にするには、delegate
のアイテムにMouseArea
コントロールを追加して、
MouseArea
コントロールのacceptedButtons
プロパティにQt.RightButton
を追加する。
以下の例では、ListViewのアイテムを右クリックした時、コンテキストメニューを表示している。
ListView {
id: listView
width: 300
height: 200
model: ListModel {
ListElement {
a: 1
b: 2
}
ListElement {
a: 3
b: 4
}
}
delegate: Rectangle {
id: rect
height: parent.height
left: parent.left
right: parent.right
verticalCenter: parent.verticalCenter
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: {
if (mouse.button == Qt.LeftButton)
{ // 左クリック
}
else if (mouse.button == Qt.RightButton)
{ // 右クリック
contextMenu.popup()
}
}
}
}
Menu {
id: contextMenu
MenuItem {
text: qsTr('Context Menu 1')
}
MenuItem {
text: qsTr('Context Menu 2')
}
}
}