2012-03-30 87 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