【发布时间】:2010-09-22 14:10:09
【问题描述】:
我正在使用带有 QItemDelegate 子类的 QTableView 来控制 tableview 单元格的外观。
每个单元格显示外接设备的名称和状态,一次最多可连接100台设备。
每个设备的名称和类型基本上是静态的,很少更新(可能每小时一次),但每个单元格都需要显示设备输入的实时值,我目前每 50 毫秒轮询一次。该值显示为画家绘制的基本条形图,提供给 TableView 的 Delegate::paint() 方法。
每秒更新我的模型 20 次的问题是每次都重绘整个表格,效率非常低。将绘制方法限制为仅绘制条形图表明大部分 CPU 时间用于在每个单元格上绘制名称、状态和相关图像,而不是图形。
我需要找到一种方法来定期更新每个单元格的图表而不重绘单元格,但我不知道该怎么做。
实现这一目标的最有效方法是什么?
编辑:附加到帮助的图片。
图像代表一个 QTableView 中的 10 个传感器。号码、姓名和状态几乎是静态的,几乎从不更新。 “传感器值”文本旁边的条形图每 50 毫秒更新一次。我只想绘制这个栏,而不是文本、状态和单元格背景。状态灯和背景是复杂的图像,因此比简单地绘制和填充矩形需要更多的 CPU 时间。
【问题讨论】:
-
状态是否需要与其他所有小部件位于同一个小部件中?我的第一个想法是在它旁边粘贴一个来自同一模型的 ListView。
-
是的,不幸的是。每个设备都有许多需要在图表旁边的参数。我确实考虑过有两个视图,也许是重叠的,但这似乎是实现我想要的一种非常混乱的方式,并且使更改模型、编辑等变得更加困难。
标签: c++ model-view-controller user-interface qt performance