2010-04-09 26 views

回答

4

QWidget內置支持通過layout()setLayout(...)函數的佈局。佈局對象控制可以添加到佈局的不同子部件的位置。此外,它確保根據指定的constraints正確調整其父部件的大小。如果佈局還沒有父窗口小部件,那麼只要佈局附加到具有setLayout()的窗口小部件,它將設置該父窗口小部件的大小。

但是,有些小部件更像是佈局管理器而不是小部件,比如QSplitterQTabWidget。考慮一下,例如QSplitter。雖然是一個小工具,但它提供了兩個不同的可以使用的區域。在這種情況下,兩個不同區域的單個佈局管理器並不合理。像QSplitter一樣,QTabWidget有一些行爲,使得單個佈局不僅沒有必要,而且也沒有用處。

我認爲這是佈局和小部件的上述融合,使得佈局和小部件的分離有時會令人困惑。

+0

如果使用模型 - 視圖 - 控制器設計模式的語言。說「佈局」是控制器是否正確?或者你可以不把它與「模型 - 視圖 - 控制器」設計模式聯繫起來? – 2011-10-20 19:37:27

2

不,佈局不是小部件或容器。佈局更像是一個附屬於窗口的「幫手」,並找出放置每個小部件的最佳位置。

這個例子從Qt的文檔應該幫助(http://qt.nokia.com/doc/4.2/layout.html):

QWidget *window = new QWidget; 
QPushButton *button1 = new QPushButton("One"); 
QPushButton *button2 = new QPushButton("Two"); 
QPushButton *button3 = new QPushButton("Three"); 
QPushButton *button4 = new QPushButton("Four"); 
QPushButton *button5 = new QPushButton("Five"); 

QHBoxLayout *layout = new QHBoxLayout; 
layout->addWidget(button1); 
layout->addWidget(button2); 
layout->addWidget(button3); 
layout->addWidget(button4); 
layout->addWidget(button5); 

window->setLayout(layout); 
window->show(); 
3

QLayout s爲佈局管理器。他們管理父窗口小部件內的窗口小部件的定位和調整大小。從文檔:

佈局是一種優雅而靈活的方式來自動安排子容器在其容器內。每個小部件通過sizeHint和sizePolicy屬性將其大小要求報告給佈局,並且該佈局相應地分配可用空間。

例如,將小部件的佈局設置爲QHBoxLayout將導致其子部件水平佈局。

你可以閱讀更多關於它here

相關問題