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);
//試圖把一個布局設置到一個已經有布局的窗口中.

根據上面的方法,就可以在主窗口中添加和刪除布局啦~
