1. 程式人生 > 其它 >Qt : 主視窗中添加布局和刪除佈局的問題.

Qt : 主視窗中添加布局和刪除佈局的問題.

1.主視窗添加布局.

都知道在QWidget中,進行佈局很簡單,直接類似如下即可:

    QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    //直接設定當前的佈局.
    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(firstButton);
    layout
->addWidget(secondButton); layout->addWidget(lastButton);

但是當應用在主視窗時,這樣使用卻沒有效果…這是因為,主視窗預設是包含選單欄,工具欄,中心視窗,狀態列等,而我們設定的佈局不應該應用在整個主視窗中,而是應該對中心視窗使用.所以我們得到如下程式碼來設定佈局:

    QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new
QPushButton(); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(firstButton); layout->addWidget(secondButton); layout->addWidget(lastButton); //建立一個視窗.設定視窗的佈局. QWidget *widget = new QWidget(this); widget->setLayout(layout); //然後對主視窗設定新的中心視窗.也就是你佈局好的視窗.
this->setCentralWidget(widget);

2.刪除原有佈局.設定新的佈局.
在主視窗中如果你想要刪除之前的佈局,而使用新的佈局,那非常的簡單,因為之前已經說了,主視窗內的是個中心視窗,所以只需要建立一個新的Widget,然後重新設定中心視窗即可.(不推薦!)

    QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

    QWidget *widget = new QWidget();
    widget->setLayout(layout);
    this->setCentralWidget(widget);
    //重新建立一個窗體.
    QWidget *newWidget = new QWidget();
    QHBoxLayout *newLayout = new QHBoxLayout();
    newLayout->addWidget(firstButton);
    newLayout->addWidget(secondButton);
    newWidget->setLayout(newLayout);
    this->setCentralWidget(newWidget);

    delete widget;

但是上述方法看起來太蠢了,最重要的是雖然使用者想要改變整體佈局,但是卻依舊使用同樣的小控制元件,比如QLineEdit,QLabel,QPushButton等.那麼新建QWidget的方法肯定是不可取的.所以我們可以直接修改原窗體的佈局.

QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

    QWidget *widget = new QWidget();
    widget->setLayout(layout);
    this->setCentralWidget(widget);

    //必須要先釋放原來的佈局!!!否則會出現下圖結果:
    delete widget->layout();
    //這裡修改為縱向佈局了.
    QVBoxLayout *c = new QVBoxLayout();
    c->addWidget(firstButton);
    c->addWidget(secondButton);
    c->addWidget(lastButton);
    widget->setLayout(c);

//試圖把一個佈局設定到一個已經有佈局的視窗中.

根據上面的方法,就可以在主視窗中新增和刪除佈局啦~