C++ QTreeView中的可见项列表
获取QTreeView显示的当前可见项目列表的最佳方式是什么?当它发生变化时,有可能得到通知吗 我的模型的数据可以在应用程序中异步更改(数据来自硬件寄存器)。刷新这些数据可能很慢,因此我希望在专用线程中定期刷新。我不想刷新所有项目,因为这将是非常低效的,只有可见的项目C++ QTreeView中的可见项列表,c++,qt,qtreeview,qmodelindex,C++,Qt,Qtreeview,Qmodelindex,获取QTreeView显示的当前可见项目列表的最佳方式是什么?当它发生变化时,有可能得到通知吗 我的模型的数据可以在应用程序中异步更改(数据来自硬件寄存器)。刷新这些数据可能很慢,因此我希望在专用线程中定期刷新。我不想刷新所有项目,因为这将是非常低效的,只有可见的项目 我知道,但在我的例子中,数据是异步更改的,因此我无法仅在调用setData()时刷新项目。忽略视图并关注模型可能更容易 您可以在简单的提前刷新缓存上对其进行建模:.data()返回最后一个已知值,但也会安排更新。因为视图将调用mo
我知道,但在我的例子中,数据是异步更改的,因此我无法仅在调用setData()时刷新项目。忽略视图并关注模型可能更容易 您可以在简单的提前刷新缓存上对其进行建模:.data()返回最后一个已知值,但也会安排更新。因为视图将调用
model.data(index)
- 当索引出现时
- 每次它改变时(使用
信号),同时索引可见dataChanged()
data()
,因此不会有任何中断
可能序列
用户界面
model.data(单元格,Qt::DisplayRole)
:
- 将单元格添加到计划索引集(如果尚未计划)
- 返回旧数据或默认数据
dataChanged()
model.data()
——返回到步骤2,或者单元格不可见,序列到此结束这将满足您连续/异步轮询可见模型项的要求。您不需要关心刷新不可见项-例如,当您滚动视图时,模型视图将在视图端口中显示这些项时执行此操作。这就是模型/视图体系结构的美妙之处。我需要刷新模型的数据,异步刷新视图中发生的事情。为此,我从缓慢的硬件寄存器中读取数据——因此是专用线程(当调用data()时,我不能仅仅从寄存器中读取数据,因为这太慢了)。由于我的模型相当大,我只想刷新当前可见项的数据。如果数据与UI不同步,这可能是一个解决方案。我的数据从UI异步更新,即使没有用户与UI交互,我仍然希望看到这些更改,因此我不能依靠UI事件更新我的Qt模型。不,这将每隔50毫秒(+读取时间)轮询UI可见的数据,即使没有交互。它不会更新不可见的数据,但这正是您所要求的。为了更清楚地说明为什么这样做可以解决您的问题,进行了此操作后,即使索引不可见,视图似乎仍会调用我的模型的data()。视图似乎重新计算了行的高度(通过QTreeViewPrivate::itemHeight()),而不管它是否可见。因此,即使项目不可见,它也会调用模型的data()。我不知道setUniformRowHeights()。你的建议有效;非常感谢。