2

我遇到了一个问题,我无法确定地判断布局何时发生。

简化示例:

我有一个带有两个子小部件的小部件。

  • 顶部小部件具有扩展宽度和固定高度。假设固定高度默认为 50。
  • 底部小部件具有扩展的高度和宽度
  • 设置了垂直布局。

假设在某处我可以单击以运行代码的按钮。该按钮不在小部件本身上,以使事情变得简单......

单击按钮时,我执行以下操作:

  1. 我测量底部可扩展小部件的高度。高度为 100。
  2. 然后我“topWidget->SetMaximumHeight(100)”和“topWidget->SetMinimumHeight(100)”
  3. 我再次测量底部可扩展小部件的高度。身高还是100

但是我看到底部的可扩展小部件改变了高度!

这意味着当我执行第 3 步时,尚未进行布局。无论我做什么,update()、updateGeometry() - 我都无法让底部小部件在第 2 步和第 3 步之间改变高度。

我解决这个问题的唯一方法是让计时器等待,比如 250 毫秒,然后测量底部小部件的高度——然后它总是正确的——这意味着重新布局正确发生

这是一个疯狂/肮脏的解决方案,但我没有另一个。是否有我缺少的 API 允许我确定性地同步更改布局并在之后查询受影响小部件的新大小?

4

1 回答 1

0

来自用户:alexisdm

尝试在步骤 #2 和 #3 之间调用 QApplication::processEvents() (它应该做计时器允许事件循环做的事情)

于 2013-06-28T21:04:41.717 回答