Qt 查找QWidget';插入前的高度

Qt 查找QWidget';插入前的高度,qt,animation,layout,widget,height,Qt,Animation,Layout,Widget,Height,我要插入一个小部件,如下所示 +--------------------+ | +-------++-------+ | | | || | | | | || | | | | || Label | | | | Label || Label | | | | || | | | | || | | | +-------++-------+ | +--------------------+ 一个QW

我要插入一个小部件,如下所示

+--------------------+
| +-------++-------+ |
| |       ||       | |
| |       ||       | |
| |       || Label | |
| | Label || Label | |
| |       ||       | |
| |       ||       | |
| +-------++-------+ |
+--------------------+
一个QWidget元素,包含两个QVBoxLayouts,每个QVBoxLayouts包含一个或多个QLabel。
此小部件将被插入到一个垂直布局中,该布局具有一个拉伸单元格,因此所有此类小部件都将位于顶部,并尽可能缩小到较小的高度

结果是这样的

______________________ ← Layout boundary
+--------------------+
| +-------++-------+ |
| |       || Label | |
| | Label || Label | | ← Widget shrunk to the smallest
| +-------++-------+ |
+--------------------+
______________________ ← Layout boundary
          ↑
          |
          | ← Spacer
          |
          ↓
______________________ ← Layout boundary
但在进行此插入之前,我想知道小部件在插入布局中的大小。可能是内部布局允许的最小尺寸。不知道怎么称呼它

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

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

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


我怎样才能做到这一点呢?

如果没有确切的代码,很难说清楚,但是根据上面的描述,我刚刚尝试重现您的示例,我建议看以下几点:

  • 听起来您实际上是在小部件显示之前调用了
    widget->height()
    。相反,请尝试调用
    widget->sizeHint().height()
    。如果父几何体没有对小部件施加任何其他约束,该方法将告诉您小部件希望的大小

  • 如果您获得的是
    sizeHint()
    ,但仍然得到了错误的答案,请查看文档以了解更多信息。我相信这一点很重要,以便为尚未显示的小部件获得更精确的几何图形:

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

  • 如果您仍然有问题,那么请查看文档和类。我必须承认,不管我读了多少次这些文件,它们从来都没有完全理解。一个不正确的大小策略值很容易搞乱布局

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


  • 不是非常相关,但是非常棒的图表;)您尝试过小部件内部布局的QLayout::minimumSize()吗?+1-480的高度几乎可以肯定,因为它从未显示过。sizeHint().height()或layout->minimumSize().height()即使在Display之前都应该返回正确的值。我在发布后大约一小时解决了这个问题,但方式非常糟糕。。。显示(),获取高度,然后隐藏()。你的方法更有效,我已经试过了,而且有效。一开始我是用
    ->geometry.height()访问的它似乎与您猜到的我使用的相同。问候语。