我的 Qt 表单有一个表格和一些标签。表格内容和标签内容变化太快,有时好像表格卡住了。但是,当我最小化表单并再次最大化它时,会出现最新的值。有关解决此问题的任何建议。
4 回答
不要每秒更新数千次用户界面。您在显示屏上看到的图像通常每秒仅更新 60 次。如果你有 CRT 显示器,刷新率可能是 50 Hz - 120 Hz,但在大多数显示器中,刷新率是 60 Hz。
绝对不需要比显示器的刷新率更频繁地更新标签内容。内容从未见过。但是更新用户界面小部件的成本很高,因此预计窗口似乎会被冻结。你正在做很多不必要的工作。
不要在每次数据更改时更新小部件。使用计时器来更新小部件。16 毫秒的计时器间隔意味着小部件每秒更新约 60 次。但更慢的更新速度很可能就足够了。
我的建议是repaint()
在更改项目后使用:
通过立即调用paintEvent() 直接重绘小部件,除非更新被禁用或小部件被隐藏。
我们建议仅在需要立即重新绘制时才使用 repaint(),例如在动画期间。在几乎所有情况下 update() 更好,因为它允许 Qt 优化速度并最小化闪烁。
您可以将信号连接到该小部件,而不是直接调用,因为repaint()
它是一个插槽。
我的水晶球表明您正在为 a 使用自定义模型QTableWidget
,但您的自定义模型未dataChanged
正确发出信号。您的帖子没有包含足够的数据——您使用的是哪种“表格”,您如何为其提供数据?
完全同意 Roku 的回答。无需以更快的速度更新用户界面,然后用户可以阅读它。我怀疑每秒超过 2-3 次的东西是否有任何更新意义。好吧,如果您使用智能代理(如网格中的进度条或其他视觉对象),则每秒可以达到 5-10 次。但是仍然没有必要每秒执行 1000 次网格更新