当我每秒调用40次时,QListWidget :: addItem()会闪烁

时间:2011-12-07 12:53:17

标签: c++ performance qt logging

比QListWidget更好的选择是在GUI中显示来自后端的大量日志行,平均速度为每秒40行?

当很多字符串已放入ListWidget时,QListWidget会长时间提供一个闪烁的白色框而不是小部件。

有没有更好的解决方案来动态显示用户的日志行?

更新
改变了架构。将新QStrings 添加到std :: deque< QString *>。使用QTimer我将每1/10秒的字符串添加到QPlainTextEdit,从deque中删除。 boost :: mutex用于保护std :: deque(日志行来自不同的线程)。

很高兴有时间实现我自己的QListView并将字符串保存在大块的预分配内存中。

3 个答案:

答案 0 :(得分:2)

您确定需要QListWidget的功能吗?如果您只想显示日志行,我认为简单的只读QPlainTextEdit会更合适。

答案 1 :(得分:1)

您可以尝试使用QListView并拥有QAbstractItemModel的实施。然后你可以根据需要存储你的行,并在大组中添加新行(大约每一秒都应该没问题)。然后在添加每一行时不会刷新视图,只能在组中进行刷新,这样可以大大提高性能。

答案 2 :(得分:0)

我建议设置刷新率并立即附加所有收集的项目。您将避免在每个追加的行中重新绘制小部件。

长话短说: 具有刷新率的QTimer(~1-3秒就足够了),QListWidget :: addItems而不是QListWidget :: addItem