可排序的QHBoxLayout

时间:2011-01-12 18:32:28

标签: c++ qt

我正在使用Qt创建一个可排序的条形图小部件。窗口小部件的布局为QHBoxLayout,用于图形中的每个条形图(也是小部件)。

当用户更改排序参数时,我的控制器会清除布局,对其进行排序,并按顺序对每个项目调用addWidget。我面临的问题是这个列表非常大(1000多个小部件),并且在尝试布局那么多元素时Qt正在爬行。

我发现每次调用addWidget时,Qt都会重新计算QHBoxLayout中每个项目的位置,然后进行更新。这是一个问题,因为它在我添加的每个LayoutItem之前执行了大量不必要的计算。对于我正在进行的1000个测试项目,求助需要大约30秒,这显然太长了。

是否有更好的布局类型可供使用,或者是否有更快的方法将已排序的小部件集合添加到布局?

编辑: 显然,我一直有的问题不在于Qt再次布置每个项目,而是在幕后进行的所有育儿和诡计的内部我设置了一个测试项目,为布局添加1000个按钮,打印每次出柜台。这些数字几乎是瞬间打印出来的,尽管Qt也需要30秒才能将自己拉直。我认为这个问题不仅存在于QHBoxLayout中,而是存在于Qt的布局系统中。看起来我将手动定位小部件并完全绕过QLayout。感谢所有提供意见的人。

3 个答案:

答案 0 :(得分:2)

来自void QLayout::setEnabled(bool enable)的{​​{3}}

  

如果enable为true,则启用此布局,否则禁用它   启用的布局会动态调整以适应更改;禁用的布局就像它一样   不存在。
  默认情况下,所有布局都已启用。

答案 1 :(得分:0)

如何制作一个Graph小部件(由Bar(或您选择的任何名称)小部件组成),它包含您为此任务优化的自己的QLayout子类(因为您必须重新实现QLayout::addItem(),这是QLayout中的纯虚拟。)

另外,请务必查看Qwt,因为它已经实现了您想要的功能。

答案 2 :(得分:0)

也许您可以在没有父项的情况下创建新的QHBoxLayout,将您的小部件添加到此布局,然后删除旧的QHBoxLayout并插入新的布局。警告:我没试过。