【发布时间】:2012-06-15 08:22:27
【问题描述】:
在 Mint Linux 12 上使用 Qt4.8,我实现了一个包含 QTableView 的简单窗口来显示模型的内容。模型数据不断更新(日志消息),dataChanged() 信号定期发出(即每 100 毫秒)。
我看到的问题是桌面上的视觉更新卡顿。
我在计算updateRequest 类型事件的窗口上安装了一个事件过滤器,这应该会触发小部件重绘(也在子小部件上,即tableView)。它们之间的平均时间约为 170 毫秒,标准偏差约为 90 毫秒(我猜这是相当大的)。然而,感知到的视觉更新率仅为每秒两到三倍,我想知道为什么。似乎并非所有updateRequest 事件都会触发小部件重绘或窗口系统会吞下视觉更新。
作为第二个测试,我通过每 100 毫秒调用一次 repaint 或 update 来强制窗口自我更新。使用repaint,我看到updateRequest 类型的事件相应增加,并且差距的标准偏差减小;使用update,数量没有增加。然而,在这两种情况下,感知更新率都只有适度的增长。
另外:有没有一种很好的方法可以测量一个小部件实际上重新绘制的频率,而不必重载其paintEvent 处理程序?也许来自QTest 的东西?
更新:我扩展了我的事件过滤器来捕获paintEvent-type 事件。与> 1000 个updateRequest 类型的事件相比,这些事件只有一位数。
【问题讨论】:
标签: c++ qt qwidget qtableview