Qt : 主視窗中添加布局和刪除佈局的問題.
阿新 • • 發佈:2021-06-24
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 = newQPushButton(); 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);
//試圖把一個佈局設定到一個已經有佈局的視窗中.
根據上面的方法,就可以在主視窗中新增和刪除佈局啦~