2012-03-30 88 views
5

子父级层次结构如下:mainWindow - > centralWidget - > frame - >小部件。基于子窗口小部件调整QMainWindow的大小?

在应用程序生命周期中调整Widget的大小,但它总是设置为固定大小。我希望QMainWindow根据它调整大小 - 以显示所有小部件所需的最小大小。

要做到这一点,我目前必须这样做。

widget->setFixedSize(x, y); 
frame->setFixedSize(frame->sizeHint()); 
centralWidget->setFixedSize(centralWidget->sizeHint()); 
mainWindow->setFixedSize(mainWindow->sizeHint()); 

如果我只调整主窗口的大小,它将无法正常工作。小部件的所有父母都需要调整大小才能使其工作。有没有更优雅的方式?是否有可能让主窗口调用调整它的所有孩子?

注意:除“小部件”外的所有小部件都具有自动布局管理功能。所以我觉得很奇怪,他们不会基于'小部件'来调整自己的大小。

+1

我可能不会理解完全是你的问题,但你能不能叫'了setMinimumSize()',而不是'setFixedSize()'? – Chris 2012-03-30 14:43:27

回答

2

布局的工作是确定小部件的大小和位置。因此,如果您显式调整布局内的子窗口小部件的大小,则需要确保新大小通过布局系统正确传递。这可以通过确保widget的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

你应该让布局管理控件的大小。就我个人而言有2种情况:

  1. 有了,当你调整父所有的孩子都太调整对于你给他们提供的尺寸政策布局。如果你选择一个固定的政策,孩子不会调整大小。所以你必须手动调整它们......但它不再怪异。

  2. 当您像您一样调整孩子的大小时,父母不会自动调整大小。你需要手工完成。幸运的是,这里有一个“魔术功能:AdjustSize”,如果你从QMainWindow中调用它,所有的部件将被调整为它们的优化尺寸。这是可能的(我不能在这里测试),如果尺寸策略是设置为固定。

希望帮助

+0

的Qt 5.5。'adjustSize '不起作用,'resize(sizeHint())'做。 – 2015-12-19 12:32:09