簡體   English   中英

來自QTreeView的可見項列表

[英]List of visible items from QTreeView

獲取QTreeView顯示的當前可見項目列表的最佳方法是什么? 是否可以在更改時收到通知?

我的模型的數據可以異步更改應用程序(數據來自硬件寄存器)。 刷新數據可能很慢,所以我想在專用線程中定期刷新。 我不想刷新所有項目,因為效率非常低,只有可見的項目。

我知道這一點 ,但在我的情況下,數據異步更改,所以我只有在調用setData()時才能刷新項目。

忽略視圖並專注於模型可能更容易。

您可以在簡單的預先刷新緩存上對其進行建模:.data()返回上一個已知值,但也會安排更新。 由於視圖將調用model.data(index)

  • 當索引進入視圖時,
  • 每次改變時(使用dataChanged()信號)索引都可見

這可以形成一個循環來輪詢可見項。 當單元格不可見時,視圖將停止調用.data(),終止循環。 您還應該考慮到data()可以在此循環之外調用,因此沒有任何中斷。

可能的順序

UI

  1. 細胞進入視野
  2. 查看調用model.data(cell, Qt::DisplayRole)
    • 將單元格添加到預定索引集(如果尚未調度)
    • 返回舊數據或默認數據
  3. 數據異步更新,發出dataChanged()
  4. 視圖中的任一單元格,視圖將再次調用model.data() - 循環回到步驟2,或者單元格不可見,序列在此處結束。

數據線程

  1. 每隔X ms更新所有預定索引(清除集合)。

這將滿足您連續/異步輪詢可見模型項的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM