第六章 Qt佈局管理器Layout編輯器
你們有沒有發現一個現象,咱們放置一個組件,給組件最原始的定位是給出這個控件的座標和寬高值,這樣Qt就知道這個組件的位置。當用戶改變窗口的大小,組件還靜靜地呆在原來的位置,這有時候顯然不是很科。因此Qt提供一種機制-佈局,解決了這個問題。只要把組件放入某一種佈局之中,當須要調整大小或位置的時候,Qt就知道該怎樣進行調整。ide
下面舉一個簡單例子:工具
1 #include <QApplication> 2 #include <QWidget> 3 #include <QSpinBox> 4 #include <QSlider> 5 #include <QHBoxLayout> 6 7 int main(int argc, char *argv[]) 8 { 9 QApplication a(argc, argv); 10 QWidget w = new QWidget; 11 w.setWindowTitle("Enter your age"); 12 13 QSpinBox *spinBox = new QSpinBox; 14 QSlider *slider = new QSlider(Qt::Horizontal); 15 spinBox->setRange(0, 130); 16 slider->setRange(0, 130); 17 18 QObject::connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int))); 19 QObject::connect(spinBox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int))); 20 21 spinBox->setValue(35); 22 23 QHBoxLayout *layout = new QHBoxLayout; 24 layout->addWidget(spinBox); 25 layout->addWidget(slider); 26 w.setLayout(layout); 27 28 w.show(); 29 30 return a.exec(); 31 }
編譯運行結果(直接改變窗體大小,看組件的變化):佈局
Qt一共有5種主要的layout,分別是:spa
水平佈局code
垂直佈局blog
使用分裂器水平佈局get
使用分裂器垂直佈局it
柵格佈局io
下面使用Qt Creator的designer對垂直佈局進行舉例,其餘佈局的使用方法相似。
1.在左邊的器件欄裏拖入三個PushButton和一個Vertical Layout(垂直佈局管理器)到中心面板。以下圖。
2.將這三個按鈕放入垂直佈局管理器,效果以下。能夠看到按鈕垂直方向排列,而且寬度能夠改變,但高度沒有改變。
3.咱們將佈局管理器總體選中,按下上面工具欄的Break Layout按鈕,即可取消佈局管理器。(咱們固然也能夠先將按鈕移出,再按下Delete鍵將佈局管理器刪除。)
4.下面咱們改用分裂器部件(QSplitter)。
先將三個按鈕同時選中,再按下上面工具欄的Lay Out Vertically in Splitter(垂直分裂器)。
效果以下圖。能夠看到按鈕的大小能夠隨之改動。這也就是分裂器和佈局管理器的分別。
5.其實佈局管理器不但能控制器件的佈局,還有個很重要的用途是,它能使器件的大小隨着窗口大小的改變而改變。
咱們先在主窗口的中心拖入一個文本編輯器Text Edit。
這時直接運行程序,效果以下。能夠看到它的大小和位置不會隨着窗口改變。
下面咱們選中主窗口部件,而後在空白處點擊鼠標右鍵,選擇Layout->Lay Out in a Grid,使整個主窗口的中心區處於網格佈局管理器中。
能夠看到,這時文本編輯器已經佔據了整個主窗口的中心區。
運行一下程序,能夠看到不管怎樣拉伸窗口,文本編輯框的大小都會隨之改變。