web-dev-qa-db-ja.com

現在表示されているデリゲートのインデックスを取得します-QMLListView

ユーザーが定義した数ページのコンテンツ(プレーンテキスト)を表示するListViewを作成しました。表示されるページはデリゲートです。一度に表示できるページは1つだけです。 iOSのランチャーが機能するのと同じように、これを使用して1つのアイテムにスナップすることにしました。ユーザーはページ間をフリックするだけです。 (これはタッチスクリーンで使用されます)

いくつかの操作のために、現在表示されているページのインデックスが必要です。 ListViewのcurrentIndexは常に== 0のままです。どうすれば取得できますか?

コードを好む人のために:

 ListView
 {
      onCurrentIndexChanged: console.log(currentIndex) // this gets called only once - at startup
      delegate: Column
      {
           // The page displayed, only one page at a time
      }
 }

ありがとう

10
marmistrz

画面に表示されている現在のアイテムのインデックスを取得する方法はたくさんあります。現在のページのx-y座標を取得できる場合は、ListViewで indexAt メソッドを使用できます。

また、各デリゲートでは、デリゲートのスコープ内でindexロールを使用してインデックスを見つけることができます。 indexは、モデルで宣言した役割のようなものであり、ListViewによって自動的に割り当てられます。例えば、

ListView 
{
    delegate: Column
    {
        property int indexOfThisDelegate: index
        //...
    }
}

indexロールが導入されました ここ

モデル内のアイテムのインデックスを含む特別なインデックスロールもデリゲートで使用できます。アイテムがモデルから削除された場合、このインデックスは-1に設定されることに注意してください。

もう1つの方法は、ListViewのcurrentItemプロパティに値を明示的に割り当てて、ビューがそれ自体でスクロールできるようにすることです。これは、Qtドキュメントの簡単な です。これはアプリケーションに似ています。

12
mcchu

私はこれがかなり古いことを知っていますが、私は同じ問題を抱えていて、私のために働くcurrentIndexを取得する方法を見つけるために時間を費やしています。私の場合、ListViewの幅を変更する必要があるため、毎回currentIndexを手動で再計算する必要がありました。

しかし、それから私は highlightRangeMode プロパティを見つけました。 ListView.StrictlyEnforceRangeに設定すると、currentIndexは常に自動的に更新され、現在表示されているアイテムの正しいインデックスが含まれます。

ListView {
    highlightRangeMode: ListView.StrictlyEnforceRange 
    // ...
}
1
Neilana

ListViewクラスの添付プロパティを使用できます( ListView )。それらはデリゲートの各インスタンスにアタッチされます。

ListView.isCurrentItemまたはListView.viewの例を参照してください。

 
 ListView {
幅:180;高さ:200 
 
コンポーネント{
 id:contactsDelegate 
長方形{
 id:ラッパー
幅:180 
高さ:contactInfo.height 
色:ListView.isCurrentItem? "黒": "赤" 
テキスト{
 id:contactInfo 
テキスト:名前+ ":" +番号
色:wrapper.ListView.isCurrentItem? "red": "black" 
} 
} 
} 
 
モデル:ContactModel {} 
デリゲート:contactsDelegate 
フォーカス:true 
} 
 
1
Vasiliy

あなたはそのようにすることができます:

QModelIndex index =this->indexAt(event->pos());
        this ->setCurrentIndex(index);
0