2016-10-06 63 views
3

在我的項目中,我需要使用QML列表視圖顯示一些數據的列表。而且,我使用的QT版本是QT 5.0.2。由於在這個版本的Qt中沒有滾動條視圖,所以我設法按照這個example來實現它。QML列表視圖中的大型數據集列表視圖/ C++列表模型

現在,數據源是提供C++ API來請求數據範圍的其他組件。數據集中的元素數量可能非常龐大(數以萬計)。

我按照下面的步驟來實現我的要求:

  1. 我有一個創建了一個C++類,從QAbstractListModel繼承我已經重寫rowCount時,數據canfetchmore並獲取更多的功能。
  2. 而在QML中,我已經將實例C++作爲模型。
  3. 每次調用fetchmore()函數時,我都會使用另一個組件提供的C++ API來請求下一組數據,並將其附加到我的列表模型中。

到目前爲止,它是好的。但我需要一些澄清 -

  1. 如果我不斷追加數據到我的列表模型,那麼我最終會在列表中存儲數千個元素(我不想這樣做)。我想限制列表中的元素數量並將其用作環形緩衝區。這可能嗎?
  2. fetchmore中的QModelIndex參數被接收爲無效索引。爲什麼?
  3. 假設一個案例:在滾動條上提到了字母,當用戶在滾動條上選擇Y時,我應該獲取以Y開頭的元素。在這裏,我可以從外部組件中獲取數據並使用新數據重置列表模型。但是,如果我這樣做,那麼我的列表將以Y元素開始,我將無法向上滾動以獲取以前的元素。 - 有沒有其他辦法可以實現這一目標?
  4. 另外,如果我詢問大量數據(例如在第3點中提到的情況下),我的其他組件需要相當長的時間 - 有什麼建議可以做出更好的設計來處理這種情況?
  5. 除了fetchmore(),還有什麼辦法動態更新模型。

我花了很多時間在谷歌上獲得我的問題的答案,我已成功失敗。 :(

任何幫助表示讚賞。在此先感謝。

回答