在插入之前找到QWidget的高度

时间:2011-09-16 21:01:23

标签: qt animation layout widget height

我有一个要插入的小部件,看起来像这样

+--------------------+
| +-------++-------+ |
| |       ||       | |
| |       ||       | |
| |       || Label | |
| | Label || Label | |
| |       ||       | |
| |       ||       | |
| +-------++-------+ |
+--------------------+

包含两个QVBoxLayouts的QWidget元素,每个包含一个或多个QLabel。
这个Widget将插入一个具有拉伸单元格的Vertical Layout中,因此所有这些小部件都将显示在顶部并缩小到可能的较小高度。

导致这样的事情。

______________________ ← Layout boundary
+--------------------+
| +-------++-------+ |
| |       || Label | |
| | Label || Label | | ← Widget shrunk to the smallest
| +-------++-------+ |
+--------------------+
______________________ ← Layout boundary
          ↑
          |
          | ← Spacer
          |
          ↓
______________________ ← Layout boundary

但在进行此插入之前,我想知道窗口小部件在插入的布局中的大小。可能是其内部布局允许的最小尺寸。不知道怎么称呼它。

我已经尝试过很多方法,比如在一个替代的不可见布局中插入小部件,这样我就可以在插入时检索它的高度,这应该与插入到我的最终布局时小部件相同。

但出于某种原因,当垂直按下时,小部件的高度最多为50px时,我总是得到480或478。所以我完全迷失了。

我必须这样做,因为我需要在插入时动画小部件,我需要知道从高度1到动画的高度。

我该怎么做?

1 个答案:

答案 0 :(得分:6)

如果没有确切的代码,很难肯定地说,但是刚刚尝试重现您的示例,从上面的描述中,我建议您查看以下内容:

  1. 听起来你在显示小部件之前实际上正在调用widget->height()。相反,请尝试拨打widget->sizeHint().height()QWidget::sizeHint()方法告诉您窗口小部件喜欢的大小,如果父几何体没有对其添加任何其他约束。

  2. 如果您正在获取sizeHint()并仍然得到错误的答案,请查看QWidget::ensurePolished()的文档。我认为重要的是要调用它,以便为尚未显示的小部件获得更准确的几何图形:

      

    QWidget在完成构建之后但在第一次显示之前调用此函数。如果要在执行操作之前确保窗口小部件被抛光,则可以调用此函数,例如,在窗口小部件的sizeHint()重新实现中可能需要正确的字体大小。

  3. 如果您仍然遇到问题,请查看QWidget::sizePolicy()和类QSizePolicy Class Reference的文档。我必须承认,无论我多次阅读enum QSizePolicy::Policy上的文档,它们都不会陷入其中。很容易让一个不正确的大小政策值弄乱您的布局。

    在实际应用尺寸政策之前,在Qt Designer中尝试不同尺寸的政策是值得的。