1

我已将 QTableView/QTreeview 更新的缓慢隔离到两个地方:

QStyledItemDelegate::paint()
Q_EMIT dataChanged()

我尝试了很多东西,使模型的数据方法几乎什么都不做,只返回一个字符串。当列数很少时,GUI 非常清晰,比如 10 列或更少。我的最终用户有巨大的 2560x1600 显示器并且喜欢最大化可以显示超过 50 列和行的视图并且总是抱怨 GUI 有多慢。一旦模型完全填充,就没有插入或删除。我所做的只是dataChanged()在以合理的速率获得新的更新时发出,每行每秒 2 次,每秒大约 48-100 行更新。

我曾尝试将图形系统切换到 OpenGL,但这无济于事。

  • 仅注释掉dataChanged()我的 CPU 使用率约为 16%
  • 仅注释掉QStyledItemDelegate::paint()我的 cpu 使用率约为 30%
  • 在启用一切的情况下运行它是 100%

基于这些统计数据,我认为速度缓慢与 Qt 相关。有没有神奇的设置可以解决这个问题?

4

1 回答 1

-1

关于您在对我的评论的回答中写的内容,答案是您应该重构发出 dataChanged 信号的代码。每秒发出 2-3 次以上没有任何意义。因此,您应该在某种代理/临时存储中累积更改,并根据 timerEvent 分别发出 emit dataChanged ,这样您就可以保证一定的刷新率而不会给 CPU 带来压力

于 2013-08-13T18:26:29.930 回答