1. 程式人生 > >Qt基礎——自適應視窗大小

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);
複製程式碼

好了,就這麼簡單!

原始檔地址: