小部件的大小与儿童相同?

Widget same size as it's children?

本文关键字:小部      更新时间:2023-10-16

在Qt中,我怎样才能有一个根据子级的大小自动调整大小的小部件?

例如,如果我有一个包含一些QPushButtonQHBoxLayoutQGroupBox,我希望QGroupBox自动计算它的大小,以便它不会大于也不小于适合所有QPushButton所需的大小。

理想情况下,我希望能够在Qt Designer中执行此操作,以便我可以创建一个已经知道如何调整QGroupBox大小的.ui文件,但是我也开始从.ui文件中的类派生并手动调整大小。

我尝试将QGroupBox放置在它自己的布局中(有和没有垫片),但这只会将QGroupBox调整为尽可能小的大小,以便看不到任何子项。

有两件事需要注意:

  1. 对分组框中的子项适当设置大小策略。从字面上看,您需要考虑按钮可以做什么 - 很可能,您不希望按钮增大或缩小,因此将它们的大小策略设置为Fixed是正确的做法。您可能让按钮水平扩展,因此可以选择MinimumExpanding的水平策略。

  2. 在分组框中设置布局的大小约束,以根据您的目标进行操作:

    ui->groupbox->layout()->setConstraint(QLayout::SetMinAndMaxSize);
    

当然,分组框将位于其父窗口中的某些布局内,但这并不重要。

通过子类化 QGroupBox 并覆盖 sizeHint 或其他大小调整函数来循环遍历子项并计算最小边界矩形,您可能会获得最大的运气。 根据分组框的动态程度,管理与新微件的连接可能是一个很小的挑战。