本文是受其他文章啓發,先把該文章轉載在這裏,以示感謝:
我們知道,通過Qt的各種Layout可以實現控件的自動佈局。 但是在使用Qt Designer創建的UI時,發現UI始終是設計時的樣子,無法隨着容器的放大縮小自適應地變化。 通過之前對ui的.h文件進行分析,我們知道Qt在生成ui代碼時,根據最外層的Layout自動添加一個了Widget: /** 這個Widget在UI設計時是沒有的,是Qt爲了方便組合其他的組件而且自動創建的。 Widget的名字是根據最外層的組件來的,這裏最外層是一個QVBoxLayout組件,故Widget 以VerticalLayoutWidget命名*/ QWidget *verticalLayoutWidget;
而我們在setupUi時,將 verticalLayoutWidget 指定爲目標窗體的子控件,而 verticalLayoutWidget 的大小是已經固定了的,如下: //創建myQtTestForm的Child Widget, verticalLayoutWidget = new QWidget(myQtTestForm); verticalLayoutWidget->setObjectName(QString::fromUtf8("verticalLayoutWidget")); verticalLayoutWidget->setGeometry(QRect(20, 20, 491, 311));
所以, verticalLayoutWidget 不會隨父窗口的放大縮小而變化。 解決辦法就是,把 verticalLayoutWidget 放在目標窗體的Layout中,代碼如下: //設置Ui ui.setupUi(this); //使Ui可自適應父窗口大小 QVBoxLayout* mainLayout = new QVBoxLayout; mainLayout->addWidget(ui.verticalLayoutWidget); setLayout(mainLayout);
好了,就這麼簡單! |
我把這個方法放到我的Main的構造函數裏(ui.setupUi(this);下面),但是不起作用,我重載了main的resizeEvent,在裏面添加代碼
ui.horizontalLayoutWidget->resize(mWindowSize);
其中mWindowsSize就是this->size() ,從而實現了自適應大小的功能。
我的是qt5.0.1,可能是版本兼容性問題吧。