【发布时间】:2011-06-08 00:51:10
【问题描述】:
我正在使用 Qt 创建一个可排序的条形图式小部件。小部件的布局为图表中的每个条形(也是小部件)使用 QHBoxLayout。
当用户更改排序参数时,我的控制器会清除布局,对其进行排序,并按顺序在每个项目上调用 addWidget。我面临的问题是这个列表非常大(1000 多个小部件),并且 Qt 在尝试布局这么多元素时正在爬行。
我发现每次调用 addWidget 时,Qt 都会重新计算 QHBoxLayout 中每个项目的位置,然后更新。这是一个问题,因为它在我添加之前对每个 LayoutItem 执行了许多不必要的计算。对于我放入的 1000 个测试项目,重新处理大约需要 30 秒,这显然太长了。
是否有更好的 Layout 类型可供使用,或者是否有更快的方法将已排序的小部件集合添加到布局中?
编辑: 显然,我遇到的问题不在于 Qt 再次布置每个项目,而是在幕后进行的所有育儿和恶作剧的内部结构我建立了一个测试项目,将 1000 个按钮添加到布局中,打印每次出一个柜台。这些数字几乎是瞬间打印出来的,尽管 Qt 花了大约 30 秒的时间来整理自己。我认为问题不仅仅存在于 QHBoxLayout 中,还存在于 Qt 的布局系统中。看起来我将手动定位小部件并完全绕过 QLayout。感谢所有提供意见的人。
【问题讨论】: