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

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <br><br> == アイテムのインデックスの取得 == 画面に表示されている現在のアイテムのインデックスを取得する方法は…」)
 
編集の要約なし
6行目: 6行目:
画面に表示されている現在のアイテムのインデックスを取得する方法は、いくつか存在する。<br>
画面に表示されている現在のアイテムのインデックスを取得する方法は、いくつか存在する。<br>
<br>
<br>
==== ListViewのindexAtメソッド ====
==== indexAtメソッド ====
現在の画面のxy座標を利用する場合、ListViewのindexAtメソッドを使用することができる。<br>
現在の画面のxy座標を利用する場合、<code>ListView</code>の<code>indexAt</code>メソッドを使用することができる。<br>
<br>
<br>
==== indexロール ====
==== インデックスロール ====
各デリゲートでは、デリゲートのスコープ内でindexロールを使用してインデックスを見つけることもできる。<br>
各デリゲートでは、デリゲートのスコープ内でインデックスロールを使用してインデックスを見つけることもできる。<br>
インデックスは、modelで宣言したロールのようなものであり、ListViewにより自動的に割り当てられる。<br>
インデックスロールは、<code>model</code>で宣言したロールのようなものであり、<code>ListView</code>により自動的に割り当てられる。<br>
indexロールの詳細は、以下のWebサイトを参照すること。<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>
モデルからアイテムを削除した場合、このインデックスは-1に設定されることに注意する。<br>
モデルからアイテムを削除した場合、このインデックスは<code>-1</code>に設定されることに注意する。<br>
<br>
<br>
==== ListViewのcurrentItemプロパティ ====
==== currentItemプロパティ ====
ListViewのcurrentItemプロパティに明示的に値を割り当てて、ListView自身でスクロールできるようにする。<br>
<code>ListView</code>の<code>currentItem</code>プロパティに明示的に値を割り当てて、<code>ListView</code>自身でスクロールできるようにする。<br>
<br>
<br>
ListViewのcurrentItemプロパティの詳細は、以下のWebサイトを参照すること。<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座標を利用する場合、ListViewindexAtメソッドを使用することができる。

インデックスロール

各デリゲートでは、デリゲートのスコープ内でインデックスロールを使用してインデックスを見つけることもできる。
インデックスロールは、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プロパティ

ListViewcurrentItemプロパティに明示的に値を割り当てて、ListView自身でスクロールできるようにする。

ListViewcurrentItemプロパティの詳細は、以下の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')
       }
    }
 }