根据子窗口小部件调整QMainWindow的大小?

6
孩子-父母层次结构如下:主窗口 -> 中央部件 -> 框架 -> 小部件。
小部件在应用程序生命周期中被调整大小,但始终设置为固定大小。我希望QMainWindow根据此调整大小 - 具有显示所有小部件所需的最小大小。
为了做到这一点,我目前必须这样做。
widget->setFixedSize(x, y);
frame->setFixedSize(frame->sizeHint());
centralWidget->setFixedSize(centralWidget->sizeHint());
mainWindow->setFixedSize(mainWindow->sizeHint());

如果只调整主窗口的大小,它无法正常工作。为使其正常工作,需要调整所有小部件的父级大小。有更加优雅的方法吗?是否可能让主窗口调用所有子元素的resize方法?

注意:除了'widget'之外的所有小部件都具有自动布局管理。因此,我觉得奇怪的是它们不基于'widget'自动调整大小。


1
我可能没有完全理解你的问题,但是你不能调用setMinimumSize()而不是setFixedSize()吗? - Chris
2个回答

2
布局的工作是确定小部件的大小和位置。因此,如果您明确调整位于布局内部的子小部件的大小,则需要确保正确通过布局系统传递新大小。这可以通过确保小部件的sizeHint()返回新大小来完成。当布局计算新大小时,将使用sizeHint()返回的值。因此,在sizeHint()更改后,只需调用updateGeometry() [qt.nokia.com]即可通知布局系统小部件已更改并可能需要更改几何形状。
确保父小部件响应其子小部件的大小调整而调整大小的另一种方法是在子项上调用setFixedSize()。
有关更多详细信息,请查看此处... http://qt-project.org/faq/answer/how_can_i_trigger_the_parent_widget_to_resize_when_its_child_widget_is_resi

1

你应该让布局管理小部件的大小。就我所知,有两种情况:

  1. 使用布局时,当你调整父级大小时,所有子级都会根据你为它们提供的大小策略进行调整大小。如果你选择了固定策略,子级将不会被调整大小。因此,你必须手动调整它们的大小...但这很奇怪。

  2. 当你像你现在这样调整子级大小时,父级不会自动调整大小。你需要手动调整。幸运的是,有一个“神奇的函数”:AdjustSize。如果你从QMainWindow调用它,所有小部件都将被调整为它们的最佳大小。可能(我无法在这里测试)如果大小策略设置为固定,则在运行时这可能不起作用。

希望这可以帮助到你。


Qt 5.5中,“adjustSize”无效,而“resize(sizeHint())”有效。真是匪夷所思。 - Violet Giraffe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接