获取QTreeView显示的当前可见项目列表的最佳方法是什么?是否可以在更改时收到通知?
我的模型的数据可以异步更改应用程序(数据来自硬件寄存器)。刷新数据可能很慢,所以我想在专用线程中定期刷新。我不想刷新所有项目,因为效率非常低,只有可见的项目。
我知道this,但在我的情况下,数据会异步更改,因此只有在调用setData()时才能刷新项目。
答案 0 :(得分:0)
忽略视图并专注于模型可能更容易。
您可以在简单的预先刷新缓存上对其进行建模:.data()返回上一个已知值,但也会安排更新。由于视图会调用model.data(index)
dataChanged()
信号),同时索引可见这可以形成一个循环来轮询可见项目。当单元格不可见时,视图将停止调用.data(),终止循环。
您还应该考虑到data()
可以在此循环之外调用,因此没有任何中断。
model.data(cell, Qt::DisplayRole)
:
dataChanged()
model.data()
- 循环回到步骤2,或者单元格不可见,序列在此处结束。这将满足您连续/异步轮询可见模型项的要求。