私のプロジェクトでは、QML リスト ビューを使用していくつかのデータのリストを表示する必要があります。使用している QT のバージョンは QT 5.0.2 です。このバージョンの Qt ではスクロール バー ビューを使用できないため、この例に従って実装することができました。
現在、データ ソースは、データの範囲を要求する C++ API を提供する別のコンポーネントです。また、データ セット内の要素の数は膨大になる可能性があります (数万単位)。
要件を達成するために、以下の手順に従いました。
- QAbstractListModel から継承する C++ クラスを作成し、rowCount、data、canfetchmore および fetch more 関数をオーバーライドしました。
- QML では、C++ のインスタンスをモデルと呼んでいます。
- fetchmore() 関数が呼び出されるたびに、別のコンポーネントによって提供される C++ API を使用して次のデータ セットを要求し、それをリスト モデルに追加します。
これまでのところ、それは良いです。しかし、私はいくつかの説明が必要です -
- リストモデルにデータを追加し続けると、リストに何千もの要素を保存することになります(私はそれをしたくありません)。リストの要素数を制限してリングバッファとして使いたい。これは可能ですか?
- fetchmore の QModelIndex パラメータが無効な Index として受信されます。なんで?
- ケースを想定します: アルファベットがスクロールバーに記載されており、ユーザーがスクロールバーで Y を選択すると、Y で始まる要素をフェッチする必要があります。ここで、外部コンポーネントからデータをフェッチし、リスト モデルを新しいデータでリセットできます。しかし、そうすると、リストは Y 要素で始まり、上にスクロールして前の要素を取得することができなくなります。-- これを達成する他の方法はありますか?
- また、膨大なデータセットを要求すると、他のコンポーネントにかなりの時間がかかります (たとえば、ポイント 3 で述べたような場合) - このケースを処理するためのより良い設計を行うための提案はありますか?
- fetchmore() 以外に、モデルを動的に更新する方法はありますか。
質問への回答を得るために Google でかなりの時間を費やしましたが、失敗しました。:(
どんな助けでも感謝します。前もって感謝します。