基于子窗口小部件调整QMainWindow的大小?

时间:2012-03-30 13:50:31

标签: c++ qt

子父级层次结构如下:mainWindow - > centralWidget - >框架 - >窗口小部件。

小部件在应用程序生命周期中正在调整大小,但它始终设置为固定大小。我希望QMainWindow基于此调整大小 - 具有显示所有小部件所需的最小大小。

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

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

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

注意:除“widget”之外的所有小部件都具有自动布局管理功能。所以我觉得奇怪的是他们没有根据'widget'调整自己的大小。

2 个答案:

答案 0 :(得分: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)

您应该让布局管理小部件的大小。就我而言,有两种情况:

  1. 在调整父级大小时,所有子级都会根据您提供给它们的大小策略调整大小。如果您选择固定的政策,则不会调整孩子的大小。所以你必须手动调整它们的大小......但它已经不再那么奇怪了。

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

  3. 希望有所帮助