Qt基礎——讓使用Designer創建的UI也能自動適應窗口大小


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

 

好了,就這么簡單!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM