Qt基礎——自適應窗口大小

本文是受其他文章啓發,先把該文章轉載在這裏,以示感謝:

我們知道,通過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);
複製代碼

 

好了,就這麼簡單!

源文件地址:http://www.cnblogs.com/linmeng/archive/2012/07/05/2559259.html

我把這個方法放到我的Main的構造函數裏(ui.setupUi(this);下面),但是不起作用,我重載了main的resizeEvent,在裏面添加代碼

 ui.horizontalLayoutWidget->resize(mWindowSize);

其中mWindowsSize就是this->size() ,從而實現了自適應大小的功能。

我的是qt5.0.1,可能是版本兼容性問題吧。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章