Qt GUI QTreeView / QTableView更新速度极慢

时间:2013-08-13 13:01:40

标签: performance qt optimization user-interface qtreeview

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

QStyledItemDelegate::paint()
Q_EMIT dataChanged()

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

我尝试将图形系统切换到OpenGL这没有用。

  • 仅评论dataChanged()我的CPU使用率约为16%
  • 仅评论QStyledItemDelegate::paint()我的cpu使用率约为30%
  • 在启用所有功能的情况下运行它是100%

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

1 个答案:

答案 0 :(得分:-1)

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