在插入之前找到QWidget的高度

Ale*_*Ale 8 height layout animation qt widget

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

+--------------------+
| +-------++-------+ |
| |       ||       | |
| |       ||       | |
| |       || Label | |
| | Label || Label | |
| |       ||       | |
| |       ||       | |
| +-------++-------+ |
+--------------------+
Run Code Online (Sandbox Code Playgroud)

包含两个QVBoxLayouts的QWidget元素,每个QVBoxLayout包含一个或多个QLabel.
这个小部件将被插入一个具有拉伸单元的垂直布局中,因此这种小部件将到达顶部并缩小到可能的较小高度.

导致这样的事情.

______________________ ? Layout boundary
+--------------------+
| +-------++-------+ |
| |       || Label | |
| | Label || Label | | ? Widget shrunk to the smallest
| +-------++-------+ |
+--------------------+
______________________ ? Layout boundary
          ?
          |
          | ? Spacer
          |
          ?
______________________ ? Layout boundary
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

我怎样才能做到这一点?

Cla*_*rae 6

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

  1. 听起来你在widget->height()小部件显示之前实际上正在调用.相反,请尝试拨打电话widget->sizeHint().height().该QWidget的:: sizeHint()方法告诉你小部件会什么尺寸想成为,如果父几何体不会在其上放置任何其他约束.

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

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

  3. 如果您仍然遇到问题,请查看QWidget :: sizePolicy()的文档和类QSizePolicy类参考.我必须承认,无论我多次阅读有关枚举QSizePolicy :: Policy的文档,它们都不会全部陷入其中.很容易让一个不正确的大小策略值弄乱你的布局.

    在实际应用大小策略之前,在Qt Designer中尝试使用不同大小的策略是值得的.